以下特性是因gyb2.0的需要而引入,作为das系统的新增特性。
1.支持系统字段可以配置
目前是为了支持gyb2而增加的功能.
在lm.conf中配置.目前仅支持的系统字段有:
SF_SRC_ORGID = 55, /// 源机构(零售商)
SF_SHEET_ID = 56, /// 单据编号
SF_DEST_ORGID= 58, /// 供应商mis
默认字段名分别为:src_orgid,sheet_id,mis_id.
可按需要扩展.
该特性不需要增加到原gyb中,对于非通用的单据处理,代码未做修改不支持此特性。
这也意味着统一代码需要做相应的修改.
das和原gyb的单据处理以及接口方面可能要各自发展.
配置方法如下:
<!--系统字段配置,默认:55-src_orgid, 56–sheet_id -->
<system_fields>
<item>
<code>55</code>
<name>SOURCEORGID</name>
</item>
<item>
<code>56</code>
<name>SHEETID</name>
</item>
<item>
<code>57</code>
<name>TARGETNO</name>
</item>
</system_fields>
2.供应商机构映射
服务器是按机构id控制用户数据访问范围的。
服务器接收单据后需要根据零售商为供应商分配的MIS编号,映射到供应商机构Id.
lm.conf按以下方式配置
<!-- 是否映射目标接收机构,默认:false-->
<map_vender_orgid>true</map_vender_orgid>
<!-- 目标机构id映射命令 -->
<cmd_get_vender_orgid>select coorgid from tb_9011 where orgid='@SOURCEORGID' and f001v_9011='@TARGETNO'</cmd_get_vender_orgid>
<cmd_get_vender_orgid>默认为:
select co_orgid from tb_1068 where f003v_1068 = '@mis_id' and orgid = @src_orgid
目前实现时对新增的<cmd_get_vender_orgid>未做有效性检查,包括语句的有效性,参数是否在系统字段范围.
CLMPlugin::GetCoOrgID修改为:
int CLMPlugin::GetCoOrgID(CQQ_ORGID orgid,const char *vender,CQQ_ORGID &co_orgid) {
int para_num = cmd_parser_.GetParamNum();
vector<string> vs;
for (int k=0;k<para_num;k++) {
stParamPair *pp = parser.GetParam(k);
switch(pp->fld_id_) {
case SF_SRC_ORGID: {
string s = LogMsg("%ul",orgid);
vs.push_back(s);
}
break;
case SF_MIS_ID:
vs.push_back(vender);
break;
default:
return -1;
}
}
char *buffer;
parser.Instance(&buffer,vs);
string sql = buffer;
delete []buffer;
GETDBC(pdbor,this->local_dbc_.c_str());
AUTO_QUERY_RECORDSET(CRecordset,prs,pdbor);
prs = pdbor->Query(adCmdText,sql.c_str());
if (prs==0)
return -1;
if (prs->IsEof()) {
return -1;
}
_variant_t vtOrgId;
if (!prs->GetFieldValue(0,vtOrgId)) {
return -1;
}
co_orgid = vtOrgId.lVal;
return 0;
}
3.允许单据表没有send_status,send_time
lm.conf增加<app_prop>配置项.
<app_prop>1<app_prop> <!--应用属性,适应不同应用而引入的属性.默认:0 -->
代码修改:
int CLMPlugin::handle_event(EVENT_TYPE e,void *arg) {
case DATA_SEND_OUT: { ///< 单据已发送
if app_prop_&1) { ///< lm不响应DATA_SEND_OUT,即不修改单据表的发送状态和时间. das for gyb2.0没有这些字段
return 0;
}
}
4.附:lm.conf完整配置
4.1 服务器lm.conf
<?xml version="1.0" encoding="gb2312" standalone="yes" ?>
<config>
<dbc>laton</dbc>
<load_data_interval>30</load_data_interval>
<backup_mis_file>false</backup_mis_file>
<mis_log_verbose>1</mis_log_verbose>
<mis_log_path>data\mislog</mis_log_path>
<RunParams>
<ImportData>0</ImportData>
<ExportData>0</ExportData>
</RunParams>
<import_file_path>data\retail\autosend</import_file_path>
<!-- 是否映射目标接收机构,默认:false-->
<map_vender_orgid>true</map_vender_orgid>
<cmd_get_vender_orgid>select coorgid from tb_9011 where orgid='@SOURCEORGID' and f001v_9011='@TARGETNO'</cmd_get_vender_orgid>
<!-- 多数据源模式(不同的源机构的数据存储在不同的数据库中) 0:单数据源 1:多数据源.默认: 0 -->
<multi_ds>1</multi_ds>
<!--数据源连接串模板 -->
<ds_connstr_template>
<database>das_server_21</database>
<item>
<ds_name>das_db_10008</ds_name>
<connstr_template>Provider=MSDASQL.1;Password=@password;Persist Security Info=false;User ID=@user;Data Source=PostgreSQL30;Location=postgres;Initial Catalog=gybao</connstr_template>
<db_ext>pg_ext.dll</db_ext> <!--数据库扩展 -->
</item>
</ds_connstr_template>
<!--系统字段配置,默认:55-src_orgid, 56–sheet_id -->
<system_fields>
<item>
<code>55</code>
<name>SOURCEORGID</name>
</item>
<item>
<code>56</code>
<name>SHEETID</name>
</item>
<item>
<code>57</code>
<name>TARGETNO</name>
</item>
</system_fields>
<item>
<code>58</code>
<name>TARGETORGID</name>
</item>
</config>
4.2 前置机lm.conf
<?xml version="1.0" encoding="gb2312" standalone="yes" ?>
<config>
<dbc>laton</dbc>
<load_data_interval>30</load_data_interval>
<backup_mis_file>false</backup_mis_file>
<mis_log_verbose>1</mis_log_verbose>
<mis_log_path>data\mislog</mis_log_path>
<RunParams>
<ImportData>1</ImportData>
<ExportData>0</ExportData>
</RunParams>
<import_file_path>data\retail\autosend</import_file_path>
<on_duplicate_key>3</on_duplicate_key>
<!--系统字段配置,默认:55-src_orgid, 56–sheet_id -->
<system_fields>
<item>
<code>55</code>
<name>SOURCEORGID</name>
</item>
<item>
<code>56</code>
<name>SHEETID</name>
</item>
</system_fields>
<app_prop>1</app_prop> <!--应用属性,适应不同应用而引入的属性.默认:0 -->
</config>