public IdocMeta(String p_SystemName, Idoc pidoc) : this(p_SystemName) { this.idoc = pidoc; this.idocType = pidoc.IDOCTYP; this.cimType = pidoc.CIMTYP; }
/// <summary> /// 根据IDOC编号从SAP系统里读取一个idoc /// </summary> /// <param name="idocNumber"></param> /// <returns></returns> public Idoc GetIodcFromSapDataBase(String idocNumber) { SAPINT.Utils.ReadTable idocReadItem = null; SAPINT.Utils.ReadTable idocReadHeader = null; DataTable dtIdocItem = new DataTable(); DataTable dtIdocHeder = new DataTable(); idocNumber = idocNumber.TrimStart('0'); String criteria = idocNumber.PadLeft(16, '0'); criteria = String.Format("DOCNUM = '{0}'", criteria); String readTableFunction = ConfigFileTool.SAPGlobalSettings.GetReadTableFunction(); idocReadItem = new Utils.ReadTable(SystemName); idocReadItem.TableName = "EDID4"; idocReadItem.SetCustomFunctionName(readTableFunction); idocReadItem.AddCriteria(criteria); idocReadItem.Run(); dtIdocItem = idocReadItem.Result; if (dtIdocItem.Rows.Count == 0) { idocReadItem = new Utils.ReadTable(SystemName); idocReadItem.TableName = "EDID2"; idocReadItem.SetCustomFunctionName(readTableFunction); idocReadItem.AddCriteria(criteria); idocReadItem.Run(); dtIdocItem = idocReadItem.Result; } if (dtIdocItem.Rows.Count == 0) { idocReadItem = new Utils.ReadTable(SystemName); idocReadItem.TableName = "EDIDD_OLD"; idocReadItem.SetCustomFunctionName(readTableFunction); idocReadItem.AddCriteria(criteria); idocReadItem.Run(); dtIdocItem = idocReadItem.Result; } if (dtIdocItem.Rows.Count == 0) { throw new SAPException(String.Format("无法找到IDOC{0}明细", idocNumber)); } //读取IDOC头 idocReadHeader = new Utils.ReadTable(SystemName); idocReadHeader.TableName = "EDIDC"; idocReadHeader.SetCustomFunctionName(readTableFunction); idocReadHeader.AddCriteria(criteria); idocReadHeader.Run(); dtIdocHeder = idocReadHeader.Result; if (dtIdocHeder.Rows.Count != 1) { throw new SAPException(String.Format("无法找到IDOC{0}抬头定义", idocNumber)); } Idoc idoc = ProcessSingleIdocFromDataTable(dtIdocHeder, dtIdocItem); return(idoc); }
private static void s_IncomingIdoc(RFCServer sender, Idoc idoc) { Console.WriteLine("Recieved Idoc " + idoc.IDOCTYP); IdocSegment e1maram = idoc.Segments["E2MARAM008", 0]; for (int i = 0; i < e1maram.ChildSegments.Count; i++) { if (e1maram.ChildSegments[i].SegmentName == "E2MAKTM001") { Console.WriteLine("Materialtext found: " + e1maram.ChildSegments[i].ReadDataBuffer(4, 40)); } } }
public Idoc DecompileIdoc(Idoc pIdoc) { this.idoc = pIdoc; this.cimType = pIdoc.CIMTYP; this.idocType = pIdoc.IDOCTYP; //在这里进行缓存,不要每次都更新IDOC的类型定义。 if (this.cimType != pIdoc.CIMTYP || this.idocType != pIdoc.IDOCTYP || _SEGMENTS.Count == 0) { GetIdocTypeDefinition(); } if (idoc == null) { throw new SAPException("Idoc is null"); } for (int i = 0; i < idoc.Segments.Count; i++) { IdocSegment segment = idoc.Segments[i]; DecompileSegment(segment); } return idoc; }
public Idoc DecompileIdoc(Idoc pIdoc) { this.idoc = pIdoc; this.cimType = pIdoc.CIMTYP; this.idocType = pIdoc.IDOCTYP; //在这里进行缓存,不要每次都更新IDOC的类型定义。 if (this.cimType != pIdoc.CIMTYP || this.idocType != pIdoc.IDOCTYP || _SEGMENTS.Count == 0) { GetIdocTypeDefinition(); } if (idoc == null) { throw new SAPException("Idoc is null"); } for (int i = 0; i < idoc.Segments.Count; i++) { IdocSegment segment = idoc.Segments[i]; DecompileSegment(segment); } return(idoc); }
/// <summary> /// 转换RFC函数读取过来的IDOC. /// </summary> /// <param name="tControl"></param> /// <param name="datarows"></param> /// <returns></returns> private Idoc processSingleIdoc(IRfcStructure tControl, IRfcTable datarows) { Idoc idoc = new Idoc { TABNAM = tControl["TABNAM"].GetValue().ToString().Trim(), MANDT = tControl["MANDT"].GetValue().ToString().Trim(), DOCNUM = tControl["DOCNUM"].GetValue().ToString().Trim(), DOCREL = tControl["DOCREL"].GetValue().ToString().Trim(), STATUS = tControl["STATUS"].GetValue().ToString().Trim(), DIRECT = tControl["DIRECT"].GetValue().ToString().Trim(), OUTMOD = tControl["OUTMOD"].GetValue().ToString().Trim(), EXPRSS = tControl["EXPRSS"].ToString().Trim(), IDOCTYP = tControl["IDOCTYP"].GetValue().ToString().Trim(), CIMTYP = tControl["CIMTYP"].GetValue().ToString().Trim(), MESTYP = tControl["MESTYP"].GetValue().ToString().Trim(), MESCOD = tControl["MESCOD"].GetValue().ToString().Trim(), MESFCT = tControl["MESFCT"].GetValue().ToString().Trim(), STD = tControl["STD"].GetValue().ToString().Trim(), STDVRS = tControl["STDVRS"].GetValue().ToString().Trim(), STDMES = tControl["STDMES"].GetValue().ToString().Trim(), SNDPOR = tControl["SNDPOR"].GetValue().ToString().Trim(), SNDPRT = tControl["SNDPRT"].GetValue().ToString().Trim(), SNDPFC = tControl["SNDPFC"].GetValue().ToString().Trim(), SNDPRN = tControl["SNDPRN"].GetValue().ToString().Trim(), SNDSAD = tControl["SNDSAD"].GetValue().ToString().Trim(), SNDLAD = tControl["SNDLAD"].GetValue().ToString().Trim(), RCVPOR = tControl["RCVPOR"].GetValue().ToString().Trim(), RCVPRT = tControl["RCVPRT"].GetValue().ToString().Trim(), RCVPFC = tControl["RCVPFC"].GetValue().ToString().Trim(), RCVPRN = tControl["RCVPRN"].GetValue().ToString().Trim(), RCVSAD = tControl["RCVSAD"].GetValue().ToString().Trim(), RCVLAD = tControl["RCVLAD"].GetValue().ToString().Trim(), CREDAT = tControl["CREDAT"].GetValue().ToString().Trim(), CRETIM = tControl["CRETIM"].GetValue().ToString().Trim(), REFINT = tControl["REFINT"].GetValue().ToString().Trim(), REFGRP = tControl["REFGRP"].GetValue().ToString().Trim(), REFMES = tControl["REFMES"].GetValue().ToString().Trim(), ARCKEY = tControl["ARCKEY"].GetValue().ToString().Trim(), SERIAL = tControl["SERIAL"].GetValue().ToString().Trim() }; Hashtable hashtable = new Hashtable(); for (int i = 0; i < datarows.RowCount; i++) { IRfcStructure structure = datarows[i]; if (structure["DOCNUM"].GetValue().ToString().Trim().Equals(tControl["DOCNUM"].GetValue().ToString().Trim())) { IdocSegment newSegment = new IdocSegment(); if (structure["PSGNUM"].GetValue().ToString() == "000000") { idoc.Segments.Add(newSegment); } else { IdocSegment segment2 = (IdocSegment)hashtable[structure["PSGNUM"].GetValue().ToString()]; if (segment2 != null) { segment2.ChildSegments.Add(newSegment); } else { idoc.Segments.Add(newSegment); } } newSegment.SegmentName = structure["SEGNAM"].GetValue().ToString(); newSegment.SegmentNumber = structure["SEGNUM"].ToString(); segNameList.Add(newSegment.SegmentName); string content = structure["SDATA"].GetValue().ToString(); newSegment.WriteDataBuffer(content, 0, 0x3e8); if (!hashtable.ContainsKey(structure["SEGNUM"].GetValue().ToString())) { hashtable.Add(structure["SEGNUM"].GetValue().ToString(), newSegment); } } } return(idoc); }
/// <summary> /// 把从数据库中读取的IDOC定义转换成一个IDOC对象。 /// </summary> /// <param name="dtHeader"></param> /// <param name="dtItem"></param> /// <returns></returns> public Idoc ProcessSingleIdocFromDataTable(DataTable dtHeader, DataTable dtItem) { if (dtHeader == null || dtItem == null) { throw new SAPException("无效的IDOC定义!!"); } if (dtHeader.Rows.Count == 0) { throw new SAPException("无法找到IDOC抬头定义!!"); } if (dtHeader.Rows.Count > 1) { throw new SAPException("存在重复的IDOC!!"); } if (dtItem.Rows.Count == 0) { throw new SAPException("无法找到IDOC明细!!"); } DataRow header = dtHeader.Rows[0]; Idoc idoc = null; try { idoc = new Idoc { // TABNAM = header["TABNAM"].ToString().Trim(), MANDT = header["MANDT"].ToString().Trim(), DOCNUM = header["DOCNUM"].ToString().Trim(), DOCREL = header["DOCREL"].ToString().Trim(), STATUS = header["STATUS"].ToString().Trim(), DIRECT = header["DIRECT"].ToString().Trim(), OUTMOD = header["OUTMOD"].ToString().Trim(), EXPRSS = header["EXPRSS"].ToString().Trim(), //特别注意不要使用“DOCTYP” IDOCTYP = header["IDOCTP"].ToString().Trim(), CIMTYP = header["CIMTYP"].ToString().Trim(), MESTYP = header["MESTYP"].ToString().Trim(), MESCOD = header["MESCOD"].ToString().Trim(), MESFCT = header["MESFCT"].ToString().Trim(), STD = header["STD"].ToString().Trim(), STDVRS = header["STDVRS"].ToString().Trim(), STDMES = header["STDMES"].ToString().Trim(), SNDPOR = header["SNDPOR"].ToString().Trim(), SNDPRT = header["SNDPRT"].ToString().Trim(), SNDPFC = header["SNDPFC"].ToString().Trim(), SNDPRN = header["SNDPRN"].ToString().Trim(), SNDSAD = header["SNDSAD"].ToString().Trim(), SNDLAD = header["SNDLAD"].ToString().Trim(), RCVPOR = header["RCVPOR"].ToString().Trim(), RCVPRT = header["RCVPRT"].ToString().Trim(), RCVPFC = header["RCVPFC"].ToString().Trim(), RCVPRN = header["RCVPRN"].ToString().Trim(), RCVSAD = header["RCVSAD"].ToString().Trim(), RCVLAD = header["RCVLAD"].ToString().Trim(), CREDAT = header["CREDAT"].ToString().Trim(), CRETIM = header["CRETIM"].ToString().Trim(), REFINT = header["REFINT"].ToString().Trim(), REFGRP = header["REFGRP"].ToString().Trim(), REFMES = header["REFMES"].ToString().Trim(), ARCKEY = header["ARCKEY"].ToString().Trim(), SERIAL = header["SERIAL"].ToString().Trim() }; Hashtable hashtable = new Hashtable(); for (int i = 0; i < dtItem.Rows.Count; i++) { DataRow item = dtItem.Rows[i]; if (item["DOCNUM"].ToString().Trim().Equals(header["DOCNUM"].ToString().Trim())) { IdocSegment newSegment = new IdocSegment(); if (item["PSGNUM"].ToString() == "000000") { idoc.Segments.Add(newSegment); } else { IdocSegment segment2 = (IdocSegment)hashtable[item["PSGNUM"].ToString()]; if (segment2 != null) { segment2.ChildSegments.Add(newSegment); } else { idoc.Segments.Add(newSegment); } } newSegment.SegmentName = item["SEGNAM"].ToString(); newSegment.SegmentNumber = item["SEGNUM"].ToString(); string content = item["SDATA"].ToString(); newSegment.WriteDataBuffer(content, 0, 0x3e8); if (!hashtable.ContainsKey(item["SEGNUM"].ToString())) { hashtable.Add(item["SEGNUM"].ToString(), newSegment); } } } } catch (Exception) { throw; } return(idoc); }
/// <summary> /// 转换RFC函数读取过来的IDOC. /// </summary> /// <param name="tControl"></param> /// <param name="datarows"></param> /// <returns></returns> private Idoc processSingleIdoc(IRfcStructure tControl, IRfcTable datarows) { Idoc idoc = new Idoc { TABNAM = tControl["TABNAM"].GetValue().ToString().Trim(), MANDT = tControl["MANDT"].GetValue().ToString().Trim(), DOCNUM = tControl["DOCNUM"].GetValue().ToString().Trim(), DOCREL = tControl["DOCREL"].GetValue().ToString().Trim(), STATUS = tControl["STATUS"].GetValue().ToString().Trim(), DIRECT = tControl["DIRECT"].GetValue().ToString().Trim(), OUTMOD = tControl["OUTMOD"].GetValue().ToString().Trim(), EXPRSS = tControl["EXPRSS"].ToString().Trim(), IDOCTYP = tControl["IDOCTYP"].GetValue().ToString().Trim(), CIMTYP = tControl["CIMTYP"].GetValue().ToString().Trim(), MESTYP = tControl["MESTYP"].GetValue().ToString().Trim(), MESCOD = tControl["MESCOD"].GetValue().ToString().Trim(), MESFCT = tControl["MESFCT"].GetValue().ToString().Trim(), STD = tControl["STD"].GetValue().ToString().Trim(), STDVRS = tControl["STDVRS"].GetValue().ToString().Trim(), STDMES = tControl["STDMES"].GetValue().ToString().Trim(), SNDPOR = tControl["SNDPOR"].GetValue().ToString().Trim(), SNDPRT = tControl["SNDPRT"].GetValue().ToString().Trim(), SNDPFC = tControl["SNDPFC"].GetValue().ToString().Trim(), SNDPRN = tControl["SNDPRN"].GetValue().ToString().Trim(), SNDSAD = tControl["SNDSAD"].GetValue().ToString().Trim(), SNDLAD = tControl["SNDLAD"].GetValue().ToString().Trim(), RCVPOR = tControl["RCVPOR"].GetValue().ToString().Trim(), RCVPRT = tControl["RCVPRT"].GetValue().ToString().Trim(), RCVPFC = tControl["RCVPFC"].GetValue().ToString().Trim(), RCVPRN = tControl["RCVPRN"].GetValue().ToString().Trim(), RCVSAD = tControl["RCVSAD"].GetValue().ToString().Trim(), RCVLAD = tControl["RCVLAD"].GetValue().ToString().Trim(), CREDAT = tControl["CREDAT"].GetValue().ToString().Trim(), CRETIM = tControl["CRETIM"].GetValue().ToString().Trim(), REFINT = tControl["REFINT"].GetValue().ToString().Trim(), REFGRP = tControl["REFGRP"].GetValue().ToString().Trim(), REFMES = tControl["REFMES"].GetValue().ToString().Trim(), ARCKEY = tControl["ARCKEY"].GetValue().ToString().Trim(), SERIAL = tControl["SERIAL"].GetValue().ToString().Trim() }; Hashtable hashtable = new Hashtable(); for (int i = 0; i < datarows.RowCount; i++) { IRfcStructure structure = datarows[i]; if (structure["DOCNUM"].GetValue().ToString().Trim().Equals(tControl["DOCNUM"].GetValue().ToString().Trim())) { IdocSegment newSegment = new IdocSegment(); if (structure["PSGNUM"].GetValue().ToString() == "000000") { idoc.Segments.Add(newSegment); } else { IdocSegment segment2 = (IdocSegment)hashtable[structure["PSGNUM"].GetValue().ToString()]; if (segment2 != null) { segment2.ChildSegments.Add(newSegment); } else { idoc.Segments.Add(newSegment); } } newSegment.SegmentName = structure["SEGNAM"].GetValue().ToString(); newSegment.SegmentNumber = structure["SEGNUM"].ToString(); segNameList.Add(newSegment.SegmentName); string content = structure["SDATA"].GetValue().ToString(); newSegment.WriteDataBuffer(content, 0, 0x3e8); if (!hashtable.ContainsKey(structure["SEGNUM"].GetValue().ToString())) { hashtable.Add(structure["SEGNUM"].GetValue().ToString(), newSegment); } } } return idoc; }
/// <summary> /// 把从数据库中读取的IDOC定义转换成一个IDOC对象。 /// </summary> /// <param name="dtHeader"></param> /// <param name="dtItem"></param> /// <returns></returns> public Idoc ProcessSingleIdocFromDataTable(DataTable dtHeader, DataTable dtItem) { if (dtHeader==null || dtItem == null) { throw new SAPException("无效的IDOC定义!!"); } if (dtHeader.Rows.Count == 0 ) { throw new SAPException("无法找到IDOC抬头定义!!"); } if (dtHeader.Rows.Count > 1) { throw new SAPException("存在重复的IDOC!!"); } if (dtItem.Rows.Count == 0) { throw new SAPException("无法找到IDOC明细!!"); } DataRow header = dtHeader.Rows[0]; Idoc idoc = null; try { idoc = new Idoc { // TABNAM = header["TABNAM"].ToString().Trim(), MANDT = header["MANDT"].ToString().Trim(), DOCNUM = header["DOCNUM"].ToString().Trim(), DOCREL = header["DOCREL"].ToString().Trim(), STATUS = header["STATUS"].ToString().Trim(), DIRECT = header["DIRECT"].ToString().Trim(), OUTMOD = header["OUTMOD"].ToString().Trim(), EXPRSS = header["EXPRSS"].ToString().Trim(), //特别注意不要使用“DOCTYP” IDOCTYP = header["IDOCTP"].ToString().Trim(), CIMTYP = header["CIMTYP"].ToString().Trim(), MESTYP = header["MESTYP"].ToString().Trim(), MESCOD = header["MESCOD"].ToString().Trim(), MESFCT = header["MESFCT"].ToString().Trim(), STD = header["STD"].ToString().Trim(), STDVRS = header["STDVRS"].ToString().Trim(), STDMES = header["STDMES"].ToString().Trim(), SNDPOR = header["SNDPOR"].ToString().Trim(), SNDPRT = header["SNDPRT"].ToString().Trim(), SNDPFC = header["SNDPFC"].ToString().Trim(), SNDPRN = header["SNDPRN"].ToString().Trim(), SNDSAD = header["SNDSAD"].ToString().Trim(), SNDLAD = header["SNDLAD"].ToString().Trim(), RCVPOR = header["RCVPOR"].ToString().Trim(), RCVPRT = header["RCVPRT"].ToString().Trim(), RCVPFC = header["RCVPFC"].ToString().Trim(), RCVPRN = header["RCVPRN"].ToString().Trim(), RCVSAD = header["RCVSAD"].ToString().Trim(), RCVLAD = header["RCVLAD"].ToString().Trim(), CREDAT = header["CREDAT"].ToString().Trim(), CRETIM = header["CRETIM"].ToString().Trim(), REFINT = header["REFINT"].ToString().Trim(), REFGRP = header["REFGRP"].ToString().Trim(), REFMES = header["REFMES"].ToString().Trim(), ARCKEY = header["ARCKEY"].ToString().Trim(), SERIAL = header["SERIAL"].ToString().Trim() }; Hashtable hashtable = new Hashtable(); for (int i = 0; i < dtItem.Rows.Count; i++) { DataRow item = dtItem.Rows[i]; if (item["DOCNUM"].ToString().Trim().Equals(header["DOCNUM"].ToString().Trim())) { IdocSegment newSegment = new IdocSegment(); if (item["PSGNUM"].ToString() == "000000") { idoc.Segments.Add(newSegment); } else { IdocSegment segment2 = (IdocSegment)hashtable[item["PSGNUM"].ToString()]; if (segment2 != null) { segment2.ChildSegments.Add(newSegment); } else { idoc.Segments.Add(newSegment); } } newSegment.SegmentName = item["SEGNAM"].ToString(); newSegment.SegmentNumber = item["SEGNUM"].ToString(); string content = item["SDATA"].ToString(); newSegment.WriteDataBuffer(content, 0, 0x3e8); if (!hashtable.ContainsKey(item["SEGNUM"].ToString())) { hashtable.Add(item["SEGNUM"].ToString(), newSegment); } } } } catch (Exception) { throw; } return idoc; }
/// <summary> /// 内部处理,根据IDOC类型与扩展类型,创建空的IDOC。 /// </summary> /// <param name="IdocType">IDOC类型</param> /// <param name="Enhancement">IDOC扩展类型</param> /// <param name="CreateEmpty">如果是TRUE,将不会复制标准的IDOC段</param> /// <returns></returns> private Idoc InternalCreateIdoc(string IdocType, string Enhancement, bool CreateEmpty) { des = SAPDestination.GetDesByName(m_sysName); IdocType = IdocType.ToUpper(); IRfcFunction function = des.Repository.CreateFunction("IDOCTYPE_READ_COMPLETE"); function["PI_IDOCTYP"].SetValue(IdocType); function["PI_CIMTYP"].SetValue(Enhancement); try { if (this.Logging) { // function.SaveToXML("IDOCTYPE_READ_COMPLETE_01_" + DateTime.Now.Ticks.ToString() + ".xml"); // function. } function.Invoke(des); if (this.Logging) { // function.SaveToXML("IDOCTYPE_READ_COMPLETE_02_" + DateTime.Now.Ticks.ToString() + ".xml"); } } catch (RfcAbapException exception) { if (!exception.Message.Trim().Equals("SEGMENT_UNKNOWN")) { throw new Exception("Get IDoc failed: " + exception.ToString()); } function["PI_RELEASE"].SetValue(" "); function.Invoke(des); } IRfcStructure structure = function.GetStructure("PE_HEADER"); Idoc idoc = new Idoc(IdocType, Enhancement) { Connection = this, MANDT = this.des.Client, Description = structure["DESCRP"].ToString() }; //IDOC类型的段定义 IRfcTable table = function.GetTable("PT_SEGMENTS"); Hashtable hashtable = new Hashtable(); for (int i = 0; i < table.RowCount; i++) { //一般来说,第一行都是主要的段定义。表示一个抬头定义。 if (table[i]["PARPNO"].GetValue().ToString() == "0000") { IdocSegment newSegment = new IdocSegment(); if (!CreateEmpty) { idoc.Segments.Add(newSegment); } newSegment.SegmentName = table[i]["SEGMENTTYP"].GetValue().ToString(); newSegment.SegmentType = table[i]["SEGMENTDEF"].GetValue().ToString(); newSegment.Description = table[i]["DESCRP"].GetValue().ToString(); int num2 = Convert.ToInt32(table[i]["GRP_OCCMAX"].GetValue().ToString().Substring(5, 5)); newSegment.MaxOccur = (num2 == 0) ? Convert.ToInt32(table[i]["OCCMAX"].GetValue().ToString().Substring(5, 5)) : num2; if (newSegment.MaxOccur == 0) { newSegment.MaxOccur = 1; } string key = table[i]["NR"].GetValue().ToString(); hashtable.Add(key, newSegment); } else { string str2 = table[i]["PARPNO"].GetValue().ToString(); string str3 = table[i]["NR"].GetValue().ToString(); IdocSegment segment2 = (IdocSegment)hashtable[str2]; if (segment2 == null) { throw new Exception("The idoc structure is not valid"); } IdocSegment segment3 = new IdocSegment(); if (!CreateEmpty) { segment2.ChildSegments.Add(segment3); } segment3.SegmentName = table[i]["SEGMENTTYP"].GetValue().ToString(); segment3.SegmentType = table[i]["SEGMENTDEF"].GetValue().ToString(); segment3.Description = table[i]["DESCRP"].GetValue().ToString(); int num3 = Convert.ToInt32(table[i]["GRP_OCCMAX"].GetValue().ToString().Substring(5, 5)); segment3.MaxOccur = (num3 == 0) ? Convert.ToInt32(table[i]["OCCMAX"].GetValue().ToString().Substring(5, 5)) : num3; if (segment3.MaxOccur == 0) { segment3.MaxOccur = 1; } hashtable.Add(str3, segment3); } } //查找段节点的结构定义。 IRfcTable table2 = function.GetTable("PT_FIELDS"); IDictionaryEnumerator enumerator = hashtable.GetEnumerator(); while (enumerator.MoveNext()) { IdocSegment segment4 = (IdocSegment)enumerator.Value; for (int j = 0; j < table2.RowCount; j++) { if (table2[j]["SEGMENTTYP"].GetValue().ToString().Trim() == segment4.SegmentName.Trim()) { segment4.Fields.Add(table2[j]["FIELDNAME"].GetValue().ToString(), table2[j]["DESCRP"].GetValue().ToString(), Convert.ToInt32(table2[j]["EXTLEN"].GetValue().ToString()), Convert.ToInt32(table2[j]["BYTE_FIRST"].GetValue().ToString()) - 0x40, table2[j]["DATATYPE"].GetValue().ToString(), ""); } } idoc.StoreSegmentForFurtherUse(segment4.Clone()); } return(idoc); }
private static void processSingleIdoc(IRfcStructure tControl, IRfcTable datarows) { Idoc idoc = new Idoc { TABNAM = tControl["TABNAM"].GetValue().ToString().Trim(), MANDT = tControl["MANDT"].GetValue().ToString().Trim(), DOCNUM = tControl["DOCNUM"].GetValue().ToString().Trim(), DOCREL = tControl["DOCREL"].GetValue().ToString().Trim(), STATUS = tControl["STATUS"].GetValue().ToString().Trim(), DIRECT = tControl["DIRECT"].GetValue().ToString().Trim(), OUTMOD = tControl["OUTMOD"].GetValue().ToString().Trim(), EXPRSS = tControl["EXPRSS"].ToString().Trim(), IDOCTYP = tControl["IDOCTYP"].GetValue().ToString().Trim(), CIMTYP = tControl["CIMTYP"].GetValue().ToString().Trim(), MESTYP = tControl["MESTYP"].GetValue().ToString().Trim(), MESCOD = tControl["MESCOD"].GetValue().ToString().Trim(), MESFCT = tControl["MESFCT"].GetValue().ToString().Trim(), STD = tControl["STD"].GetValue().ToString().Trim(), STDVRS = tControl["STDVRS"].GetValue().ToString().Trim(), STDMES = tControl["STDMES"].GetValue().ToString().Trim(), SNDPOR = tControl["SNDPOR"].GetValue().ToString().Trim(), SNDPRT = tControl["SNDPRT"].GetValue().ToString().Trim(), SNDPFC = tControl["SNDPFC"].GetValue().ToString().Trim(), SNDPRN = tControl["SNDPRN"].GetValue().ToString().Trim(), SNDSAD = tControl["SNDSAD"].GetValue().ToString().Trim(), SNDLAD = tControl["SNDLAD"].GetValue().ToString().Trim(), RCVPOR = tControl["RCVPOR"].GetValue().ToString().Trim(), RCVPRT = tControl["RCVPRT"].GetValue().ToString().Trim(), RCVPFC = tControl["RCVPFC"].GetValue().ToString().Trim(), RCVPRN = tControl["RCVPRN"].GetValue().ToString().Trim(), RCVSAD = tControl["RCVSAD"].GetValue().ToString().Trim(), RCVLAD = tControl["RCVLAD"].GetValue().ToString().Trim(), CREDAT = tControl["CREDAT"].GetValue().ToString().Trim(), CRETIM = tControl["CRETIM"].GetValue().ToString().Trim(), REFINT = tControl["REFINT"].GetValue().ToString().Trim(), REFGRP = tControl["REFGRP"].GetValue().ToString().Trim(), REFMES = tControl["REFMES"].GetValue().ToString().Trim(), ARCKEY = tControl["ARCKEY"].GetValue().ToString().Trim(), SERIAL = tControl["SERIAL"].GetValue().ToString().Trim() }; Hashtable hashtable = new Hashtable(); for (int i = 0; i < datarows.RowCount; i++) { IRfcStructure structure = datarows[i]; if (structure["DOCNUM"].GetValue().ToString().Trim().Equals(tControl["DOCNUM"].GetValue().ToString().Trim())) { IdocSegment newSegment = new IdocSegment(); if (structure["PSGNUM"].GetValue().ToString() == "000000") { idoc.Segments.Add(newSegment); } else { IdocSegment segment2 = (IdocSegment)hashtable[structure["PSGNUM"].GetValue().ToString()]; if (segment2 != null) { segment2.ChildSegments.Add(newSegment); } else { idoc.Segments.Add(newSegment); } } newSegment.SegmentName = structure["SEGNAM"].GetValue().ToString(); string content = structure["SDATA"].GetValue().ToString(); newSegment.WriteDataBuffer(content, 0, 0x3e8); if (!hashtable.ContainsKey(structure["SEGNUM"].GetValue().ToString())) { hashtable.Add(structure["SEGNUM"].GetValue().ToString(), newSegment); } } } // IdocMeta idocMeta = new IdocMeta(ConfigFileTool.SAPGlobalSettings.GetDefaultSapCient(), idoc); // idocMeta.getIdocTypeDefinition(); // idocMeta.deCompileIdoc(); idoc.SavePlainData(@"d:/test.txt"); //idocsegment e1maram = idoc.segments["E2MARAM006", 0]; //// loop through segments and find the right ones //for (int i = 0; i < e1maram.childsegments.count; i++) // if (e1maram.childsegments[i].segmentname == "e2maktm001") // console.writeline("materialtext found: " + // e1maram.childsegments[i].readdatabuffer(4, 40)); }