这是怎样的一个工具?这是一个极速解决你99.99% B1iSN daily issues的工具,会极大的提高你的工作效率。说实话,如果不考虑业务上的限制,这个工具,理论上可以操作任何B1数据。
我们知道在B1iSN的日常问题处理中,作为一个系统集成平台,B1iSN基本上就是将数据从源系统集成到目标系统中。在B1iSN中,通过XML来描述源系统与目标系统的数据转换,下面是一个B1iSN的XML消息实例。
<?xml version="1.0" encoding="UTF-8"?> <Msg xmlns="urn:com.sap.b1i.vplatform:entity" MessageId="17120819550810008938AC100F3C7020" BeginTimeStamp="20171208195508" recording="true" logmsg="0000" SubMessageId="1_1" status="success" callMsgLog="true" finalonly="false" BackMessageId="1_2" DelMessageId="1" b1msg="" b1status="success" msglogexcl="false" handover2CentralSrv="" MessageLog="true" msglogdbop="insert"> <Header>...</Header> <Body> <Payload Role="T" Type="Queue" add="....JVSOCQ2B1"/> <Payload Role="S"> <INQ xmlns=""> <SysTypeProperties/> <OrderResponse xmlns="urn://....com/GovernanseAndSupport/Common/EuroferXML/OrderResponse" schemaVersion="1.2"> <OrderResponseHeader> <OrderResponseNumber>...</OrderResponseNumber> <OrderResponseDate>20171208</OrderResponseDate> <OrderResponseStatusCode>29</OrderResponseStatusCode> <DocumentReference> <DocumentReferenceNumber>...</DocumentReferenceNumber> <DocumentReferenceQualifierCode>CO</DocumentReferenceQualifierCode> </DocumentReference> ... </OrderResponseHeader> <OrderResponseLine> <OrderResponseLineNumber>10</OrderResponseLineNumber> <OrderResponseLineStatusCode>23</OrderResponseLineStatusCode> <DocumentReference> <DocumentReferenceNumber>...</DocumentReferenceNumber> <DocumentReferenceLineNumber>0</DocumentReferenceLineNumber> <DocumentReferenceQualifierCode>CO</DocumentReferenceQualifierCode> </DocumentReference> <ProductSpecification> <ItemIdentification> <CustomerArticleNumber>ITM07103</CustomerArticleNumber> <SupplierArticleNumber>3796</SupplierArticleNumber> </ItemIdentification> <AdditionalItemIdentification> <ItemReferenceTypeCode>Other</ItemReferenceTypeCode> <ItemReferenceNumber>B045</ItemReferenceNumber> </AdditionalItemIdentification> </ProductSpecification> <ScheduleLine> <Quantity> <QuantityValue unitCode="PCS">5</QuantityValue> </Quantity> <ConfirmedDeliveryDate> <Date>20180226</Date> </ConfirmedDeliveryDate> </ScheduleLine> <ScheduleLine> <Quantity> <QuantityValue unitCode="KG">18215</QuantityValue> </Quantity> <ConfirmedDeliveryDate> <Date>20180226</Date> </ConfirmedDeliveryDate> </ScheduleLine> <TransportModeCode>6</TransportModeCode> <PackageData> <PackageTypeCode>SZ</PackageTypeCode> <PackageDimension> <DimensionUnitCode>MMT</DimensionUnitCode> <DimensionValue>5800</DimensionValue> <DimensionTypeCode>LN</DimensionTypeCode> </PackageDimension> <PackageDimension> <DimensionUnitCode>MMT</DimensionUnitCode> <DimensionValue>2000</DimensionValue> <DimensionTypeCode>WD</DimensionTypeCode> </PackageDimension> <PackageDimension> <DimensionUnitCode>MMT</DimensionUnitCode> <DimensionValue>40.00</DimensionValue> <DimensionTypeCode>HT</DimensionTypeCode> </PackageDimension> </PackageData> <Price> <PriceAmount>...</PriceAmount> </Price> <TotalOrderResponseLineQuantity unitCode="PCS">5</TotalOrderResponseLineQuantity> <OrderResponseLineNote>3796</OrderResponseLineNote> </OrderResponseLine> </OrderResponse> </INQ> </Payload> ... <Payload Role="R" id="atom0" pltype="xml"> <b1im_multimsg xmlns=""> <b1im_msg> <BOM> <BO> <AdmInfo> <Object>22</Object> <Version>2</Version> </AdmInfo> <QueryParams> <DocEntry>6906</DocEntry> </QueryParams> <Documents> <row> <CardCode>...</CardCode> <NumAtCard>...</NumAtCard> <DocDueDate>20171208</DocDueDate> <Confirmed>tYES</Confirmed> <Comments>...</Comments> <U_..._HMA_ORDREDI>A</U_..._HMA_ORDREDI> <U_..._HMA_TR2>...Vendor</U_..._HMA_TR2> <U_..._HMA_STORLOC/> </row> </Documents> <Document_Lines> <row> <LineNum>0</LineNum> <ItemCode>ITM07103</ItemCode> <Quantity>18215</Quantity> <WarehouseCode>01</WarehouseCode> <ShipDate>20180226</ShipDate> <UnitPrice>...</UnitPrice> <FreeText>3796</FreeText> <ExLineNo>10</ExLineNo> <U_..._LMA_NPCS>5</U_..._LMA_NPCS> <U_..._LMA_POREF>...</U_..._LMA_POREF> <U_..._LMA_POLINE>10</U_..._LMA_POLINE> <U_..._LMA_PNTCDOVR>B045</U_..._LMA_PNTCDOVR> </row> </Document_Lines> </BO> </BOM> </b1im_msg> </b1im_multimsg> </Payload> </Body> </Msg>
在这个Message中,Role=’S’ Part 代表的就是接收自源系统的数据,Role=’R’ Part 代表的则是目标系统接收的数据。从源系统发出后,到达B1iSN平台,平台通过各种有效的操作后,最终变成目标系统可以接收的’R’ Part.
而我们的Daily issues处理,绝大多数都是’R’ Part的数据不正确造成的,但是B1iSN平台没有能力让我们直接修改’R’ Part数据,如果要想通过B1iSN平台得到正确的’R’ Part数据,必须要从’S’ Part 开始修改数据,以及后面的每一个Payload处理操作都有可能需要修改条件,才能有可能最终得到所需要的’R’ Part数据。这还不如让用户手工在B1中操作来得快。
那么有没有一种办法,如果能够直接将’R’ Part数据修改正确,然后提交到B1中呢?答案是有的。原理其实很简单,先来看看如果是B1iSN的话,它是怎么去处理一个B1请求的,当B1iSN接收到’R’ Part数据的时候,它通过Tomact JVM Runtime来调用B1 API,进而去增加一条新B1数据,或者修改某条已经存在的B1数据。即是说,B1iSN最终是通过B1 API去操作。所以很自然的想到,我们是否可以自己通过B1 API去操纵’R’ Part,这样就可以将修改后正确的’R’ Part通过B1 API提交到B1中。答案当然是肯定的,既然B1iSN可以通过B1 API实现,我们自己当然也可以通过编程来实现。
于是便有了下面这样一个工具,在这个工具的帮助下,能够处理大部分的B1iSN Daily issues,并且更加准确和高效。目前该工具已经正常使用4个月有余,功能已经较为稳定,该工具目前具有以下功能:
- 切换不同的工作环境:生产环境和测试环境
- 添加B1数据
- 修改B1数据
下面做一个演示:
- 软件登陆,会根据环境的不同,出现不同的Companies供选择,输入B1用户名和密码进行连接。
- 将’R’ Part保存为一个文本文件,在下面的界面中选择这个文本文件。
- 通过Preview按钮,可以预览这个文本文件,方便在提交之前再进行一次人工检查。
- 点击Submit按钮,如果一切顺利,会提供操作成功提示,如果失败,会提供异常信息。
- 下面我们在B1中对刚刚添加的这条数据进行检查,确保和预期一致。
- 以上是添加一条数据,现在我们通过该工具来修改这条刚刚添加的数据。
- 千万不要忘记将Operation Type更改为Update,否则将是产生一条新数据,而不是修改了。
- 我们再次来B1中检查数据是否已经被正确更新。
Supported B1 version is B1 9.0 PL 08.
One Reply to “B1 Xml Firing 一个极速解决B1iSN daily issue的工具”