/// <summary> /// 根据IDOC的IDOC类型,到SAP系统里查找它对应的类型定义 /// </summary> private void GetIdocTypeDefinition() { if (idoc == null) { throw new SAPException("IDOC是空值。"); } if (idoc != null) { if (String.IsNullOrWhiteSpace(this.idocType)) { throw new SAPException("空白的IDOC类型"); } RfcDestination destination = SAPDestination.GetDesByName(sysName); IRfcFunction function = destination.Repository.CreateFunction("IDOCTYPE_READ_COMPLETE"); function.SetValue("PI_IDOCTYP", this.idocType); function.SetValue("PI_CIMTYP", this.cimType); function.Invoke(destination); IRfcTable rfctable_PT_FIELDS = function.GetTable("PT_FIELDS"); EDI_IAPI12 _EDI_IAPI12; for (int i = 0; i < rfctable_PT_FIELDS.RowCount; i++) { _EDI_IAPI12 = new EDI_IAPI12(); _EDI_IAPI12.SEGMENTTYP = rfctable_PT_FIELDS[i].GetString("SEGMENTTYP"); // 段类型(30 字符格式) _EDI_IAPI12.FIELDNAME = rfctable_PT_FIELDS[i].GetString("FIELDNAME"); // 字段名 _EDI_IAPI12.INTLEN = rfctable_PT_FIELDS[i].GetInt("INTLEN"); // 以字节计的内部长度 _EDI_IAPI12.EXTLEN = rfctable_PT_FIELDS[i].GetInt("EXTLEN"); // 输出长度 _EDI_IAPI12.FIELD_POS = rfctable_PT_FIELDS[i].GetInt("FIELD_POS"); // 字段的位置号码 _EDI_IAPI12.BYTE_FIRST = rfctable_PT_FIELDS[i].GetInt("BYTE_FIRST"); // 第一个字节的位置 _EDI_IAPI12.BYTE_LAST = rfctable_PT_FIELDS[i].GetInt("BYTE_LAST"); // 最后一个字节的位置 _EDI_IAPI12.ROLLNAME = rfctable_PT_FIELDS[i].GetString("ROLLNAME"); // 数据元素 (语义域) _EDI_IAPI12.DOMNAME = rfctable_PT_FIELDS[i].GetString("DOMNAME"); // 定义域名 _EDI_IAPI12.DATATYPE = rfctable_PT_FIELDS[i].GetString("DATATYPE"); // ABAP/4 字典: 屏幕绘制器的屏幕数据类型 _EDI_IAPI12.DESCRP = rfctable_PT_FIELDS[i].GetString("DESCRP"); // 对象的简短说明 _EDI_IAPI12.ISOCODE = rfctable_PT_FIELDS[i].GetString("ISOCODE"); // IDoc 开发:字段中的 ISO 代码标识 _EDI_IAPI12.VALUETAB = rfctable_PT_FIELDS[i].GetString("VALUETAB"); // IDoc 段字段的值表 _FIELDS.Add(_EDI_IAPI12); } IRfcTable rfctable_PT_FVALUES = function.GetTable("PT_FVALUES"); EDI_IAPI14 _EDI_IAPI14; for (int i = 0; i < rfctable_PT_FVALUES.RowCount; i++) { _EDI_IAPI14 = new EDI_IAPI14(); _EDI_IAPI14.STRNAME = rfctable_PT_FVALUES[i].GetString("STRNAME"); // 内部结构的名称 _EDI_IAPI14.FIELDNAME = rfctable_PT_FVALUES[i].GetString("FIELDNAME"); // 字段名 _EDI_IAPI14.FLDVALUE_L = rfctable_PT_FVALUES[i].GetString("FLDVALUE_L"); // 下限值 / 单一值 _EDI_IAPI14.FLDVALUE_H = rfctable_PT_FVALUES[i].GetString("FLDVALUE_H"); // 上限值 _EDI_IAPI14.DESCRP = rfctable_PT_FVALUES[i].GetString("DESCRP"); // 说明简要文字 _FVALUES.Add(_EDI_IAPI14); } IRfcTable rfctable_PT_MESSAGES = function.GetTable("PT_MESSAGES"); EDI_IAPI17 _EDI_IAPI17; for (int i = 0; i < rfctable_PT_MESSAGES.RowCount; i++) { _EDI_IAPI17 = new EDI_IAPI17(); _EDI_IAPI17.MESTYP = rfctable_PT_MESSAGES[i].GetString("MESTYP"); // 消息类型 _EDI_IAPI17.DESCRP = rfctable_PT_MESSAGES[i].GetString("DESCRP"); // 对象的简短说明 _EDI_IAPI17.IDOCTYP = rfctable_PT_MESSAGES[i].GetString("IDOCTYP"); // 基本类型 _EDI_IAPI17.CIMTYP = rfctable_PT_MESSAGES[i].GetString("CIMTYP"); // 扩展类型 _EDI_IAPI17.RELEASED = rfctable_PT_MESSAGES[i].GetString("RELEASED"); // 消息类型分配有效的版本 _MESSAGES.Add(_EDI_IAPI17); } IRfcTable rfctable_PT_SEGMENTS = function.GetTable("PT_SEGMENTS"); EDI_IAPI11 _EDI_IAPI11; for (int i = 0; i < rfctable_PT_SEGMENTS.RowCount; i++) { _EDI_IAPI11 = new EDI_IAPI11(); _EDI_IAPI11.NR = rfctable_PT_SEGMENTS[i].GetInt("NR"); // IDoc 类型中段的序列号 _EDI_IAPI11.SEGMENTTYP = rfctable_PT_SEGMENTS[i].GetString("SEGMENTTYP"); // 段类型(30 字符格式) _EDI_IAPI11.SEGMENTDEF = rfctable_PT_SEGMENTS[i].GetString("SEGMENTDEF"); // IDoc 开发:段定义 _EDI_IAPI11.QUALIFIER = rfctable_PT_SEGMENTS[i].GetString("QUALIFIER"); // 标记:IDoc 中限定的段 _EDI_IAPI11.SEGLEN = rfctable_PT_SEGMENTS[i].GetInt("SEGLEN"); // 一个字段的长度(位置的数目) _EDI_IAPI11.PARSEG = rfctable_PT_SEGMENTS[i].GetString("PARSEG"); // 段类型(30 字符格式) _EDI_IAPI11.PARPNO = rfctable_PT_SEGMENTS[i].GetInt("PARPNO"); // 父代段的序列号 _EDI_IAPI11.PARFLG = rfctable_PT_SEGMENTS[i].GetString("PARFLG"); // 父段标记:段是段组的开始 _EDI_IAPI11.MUSTFL = rfctable_PT_SEGMENTS[i].GetString("MUSTFL"); // 标记:强制条目 _EDI_IAPI11.OCCMIN = rfctable_PT_SEGMENTS[i].GetInt("OCCMIN"); // 序列中段的最小数目 _EDI_IAPI11.OCCMAX = rfctable_PT_SEGMENTS[i].GetDouble("OCCMAX"); // 序列中最大段数目 _EDI_IAPI11.HLEVEL = rfctable_PT_SEGMENTS[i].GetInt("HLEVEL"); // IDoc 类型段的层次水平 _EDI_IAPI11.DESCRP = rfctable_PT_SEGMENTS[i].GetString("DESCRP"); // 对象的简短说明 _EDI_IAPI11.GRP_MUSTFL = rfctable_PT_SEGMENTS[i].GetString("GRP_MUSTFL"); // 组标记:强制 _EDI_IAPI11.GRP_OCCMIN = rfctable_PT_SEGMENTS[i].GetInt("GRP_OCCMIN"); // 序列中最小组号 _EDI_IAPI11.GRP_OCCMAX = rfctable_PT_SEGMENTS[i].GetDouble("GRP_OCCMAX"); // 序列中最大组号 _EDI_IAPI11.REFSEGTYP = rfctable_PT_SEGMENTS[i].GetString("REFSEGTYP"); // 段类型(30 字符格式) _SEGMENTS.Add(_EDI_IAPI11); } } }