工作中,需要完成以下的工作場(chǎng)景:
【場(chǎng)景】單據(jù)轉(zhuǎn)換不支持多選基礎(chǔ)資料下推;
【案例】通過(guò)單據(jù)轉(zhuǎn)換插件,實(shí)現(xiàn)應(yīng)收單單據(jù)頭的多選基礎(chǔ)資料下推到付款申請(qǐng)單的單據(jù)頭的多選基礎(chǔ)資料
原文鏈接:https://vip.kingdee.com/article/324304152484608000?productLineId=1
需要將原代碼轉(zhuǎn)換為python代碼,首先咨詢了CSDN的AI,給我的解答是:
可以使用java2python庫(kù)將Java代碼轉(zhuǎn)換為Python代碼。以下是使用java2python庫(kù)的步驟:
安裝java2python庫(kù):可以使用pip命令進(jìn)行安裝,命令如下:
?
pip install java2python
將Java代碼保存到文件中,例如保存為example.java。使用java2python庫(kù)將Java代碼轉(zhuǎn)換為Python代碼,命令如下:
?
java2python example.java > example.py
這將把Java代碼轉(zhuǎn)換為Python代碼并將其保存到example.py文件中。可以使用Python解釋器運(yùn)行生成的Python代碼,例如:
?
python example.py
這將運(yùn)行生成的Python代碼并輸出結(jié)果
實(shí)測(cè)pip install java2python 這一步報(bào)錯(cuò),一直安裝不上,找不到j(luò)ava2python,可能我的源太少了。
后邊再測(cè)試一下百度AI,看是如何解答的。
以下是測(cè)試過(guò)程:
我:將以下代碼轉(zhuǎn)換為python:
百度AI:很遺憾,您沒(méi)有提供任何代碼片段,因此我無(wú)法為您轉(zhuǎn)換任何代碼。如果您能提供一些具體的代碼,我將非常樂(lè)意幫助您進(jìn)行轉(zhuǎn)換。
我:public override void AfterConvert(AfterConvertEventArgs e)
? ? ? ? {
? ? ? ? ? ? base.AfterConvert(e);
? ? ? ? ? ? if (e.Result == null)
? ? ? ? ? ? ? ? return;
? ? ? ? ? ? /*
? ? ? ? ? ? ?* <0>僅支持單據(jù)頭到單據(jù)頭,其他自行處理
? ? ? ? ? ? ?*/
? ? ? ? ? ? string tgtFieldKey = "F_BHR_MulBase";
? ? ? ? ? ? string srcFieleKey = "F_BHR_MulBase";
? ? ? ? ? ? MulBaseDataField tgtBaseDataField = e.TargetBusinessInfo.GetField(tgtFieldKey) as MulBaseDataField;
? ? ? ? ? ? MulBaseDataField srcBaseDataField = e.SourceBusinessInfo.GetField(srcFieleKey) as MulBaseDataField;
? ? ? ? ? ? if (tgtBaseDataField == null || srcBaseDataField == null)
? ? ? ? ? ? ? ? return;
? ? ? ? ? ? if (tgtBaseDataField.Entity.ElementType != Kingdee.BOS.Core.Metadata.ElementMetadata.ElementType.ELEMENTTYPE_BILLHEAD)
? ? ? ? ? ? ? ? return;
? ? ? ? ? ? if (srcBaseDataField.Entity.ElementType != Kingdee.BOS.Core.Metadata.ElementMetadata.ElementType.ELEMENTTYPE_BILLHEAD)
? ? ? ? ? ? ? ? return;
? ? ? ? ? ? /*
? ? ? ? ? ? ?* <1>收集源單內(nèi)碼批量獲取
? ? ? ? ? ? ?*/
? ? ? ? ? ? Entity tgtEntity = tgtBaseDataField.Entity;
? ? ? ? ? ? var targetEntityObjs = e.Result.FindByEntityKey(tgtEntity.Key);
? ? ? ? ? ? HashSet<object> srcPkIds = new HashSet<object>();
? ? ? ? ? ? for (int i = 0, sz = targetEntityObjs.Length; i < sz; ++i)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? var targetEntityRow = targetEntityObjs[i];
? ? ? ? ? ? ? ? if (targetEntityRow.DataEntity == null)
? ? ? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? ? ? //獲取當(dāng)前目標(biāo)行的源單數(shù)據(jù)集合
? ? ? ? ? ? ? ? var sourceEntityObjs = targetEntityRow["ConvertSource"] as List<Kingdee.BOS.Orm.DataEntity.DynamicObject>;
? ? ? ? ? ? ? ? if (sourceEntityObjs == null)
? ? ? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? ? ? foreach (var sourceObj in sourceEntityObjs)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? if (sourceObj == null)
? ? ? ? ? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? ? ? ? ? srcPkIds.Add(sourceObj[0]);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
?? ??? ??? ?//<2>加載源單多選基礎(chǔ)資料,這個(gè)地方由于是單據(jù)頭可以直接取數(shù)
? ? ? ? ? ? List<string> loadFields = new List<string>
百度AI:看起來(lái)你的代碼是在處理一些特定的數(shù)據(jù)轉(zhuǎn)換操作,特別是在Kingdee BOS系統(tǒng)中。然而,你的問(wèn)題并沒(méi)有完整地給出,因此我無(wú)法為你提供完整的Python代碼轉(zhuǎn)換。
不過(guò),我可以嘗試幫助你理解這段代碼的大致邏輯,并給出如何在Python中實(shí)現(xiàn)相同邏輯的建議。由于我不清楚你的數(shù)據(jù)結(jié)構(gòu)和庫(kù),以下代碼可能需要根據(jù)你的具體情況進(jìn)行修改:
python
def after_convert(self, args):
? ? super().after_convert(args)
? ? if args.result is None:
? ? ? ? return
? ? # <0> Only support billhead to billhead, handle others as needed.
? ? tgt_field_key = "F_BHR_MulBase"
? ? src_field_key = "F_BHR_MulBase"
? ? tgt_base_data_field = args.target_business_info.get_field(tgt_field_key) as MulBaseDataField
? ? src_base_data_field = args.source_business_info.get_field(src_field_key) as MulBaseDataField
? ??
? ? if tgt_base_data_field is None or src_base_data_field is None:
? ? ? ? return
? ? if tgt_base_data_field.entity.element_type != ElementType.ELEMENTTYPE_BILLHEAD:
? ? ? ? return
? ? if src_base_data_field.entity.element_type != ElementType.ELEMENTTYPE_BILLHEAD:
? ? ? ? return
? ? # <1> Collect source bill IDs in batch.
? ? tgt_entity = tgt_base_data_field.entity
? ? target_entity_objs = args.result.find_by_entity_key(tgt_entity.key)
? ? src_pk_ids = set()
? ? for row in target_entity_objs:
? ? ? ? if row.data_entity is None:
? ? ? ? ? ? continue
? ? ? ? source_entity_objs = row["ConvertSource"] as List[DynamicObject]
? ? ? ? if source_entity_objs is None:
? ? ? ? ? ? continue
? ? ? ? for source_obj in source_entity_objs:
? ? ? ? ? ? if source_obj is None:
? ? ? ? ? ? ? ? continue
? ? ? ? ? ? src_pk_ids.add(source_obj[0])
? ? # <2> Load multiple source bills based on collected IDs.?
? ? # You will need to modify this section to fit your specific data loading methods.
? ? load_fields = new List[string] ?# Here you were starting to define fields to load, but did not finish the code. Please fill in the necessary information here based on your needs.
請(qǐng)注意,這段Python代碼可能不會(huì)完全按照你原始的C#代碼運(yùn)行,因?yàn)槲覜](méi)有你的數(shù)據(jù)模型和庫(kù)的具體信息。你可能需要根據(jù)你自己的需求對(duì)上面的代碼進(jìn)行一些修改。
因?yàn)橄拗屏俗謹(jǐn)?shù),復(fù)制不全,所以繼續(xù)復(fù)制下一段代碼
我:Kingdee.BOS.Core.Metadata.BusinessInfo subBusinessInfo = e.SourceBusinessInfo.GetSubBusinessInfo(loadFields);
? ? ? ? ? ? var srcBillObjs = Kingdee.BOS.ServiceHelper.BusinessDataServiceHelper.Load(this.Context, srcPkIds.ToArray(), subBusinessInfo.GetDynamicObjectType());
? ? ? ? ? ? var srcBillObjsMap = srcBillObjs.ToDictionary((x) => { return x[0]; });
? ? ? ? ? ? Dictionary<object, Kingdee.BOS.Orm.DataEntity.DynamicObject> baseDataObjCache = new Dictionary<object, Kingdee.BOS.Orm.DataEntity.DynamicObject>();
百度AI:這段代碼是使用Kingdee BOS平臺(tái)進(jìn)行業(yè)務(wù)數(shù)據(jù)操作的一段示例代碼。下面是對(duì)這段代碼的簡(jiǎn)單解釋:
從數(shù)據(jù)源(e.SourceBusinessInfo)中獲取子業(yè)務(wù)信息(subBusinessInfo)。
使用BusinessDataServiceHelper.Load方法加
回答不符合,我就讓AI停止回答了。
換一種思路提問(wèn):
我:等我分多次,發(fā)完整的代碼之后,你再幫我轉(zhuǎn)成python代碼。
后邊是分三段發(fā)的代碼,段落太長(zhǎng),這里就不再?gòu)?fù)制,重點(diǎn)看AI的回答。
百度AI:以下是轉(zhuǎn)換后的Python代碼:
python
# 第一段代碼
def after_convert(self, e):
? ? super().after_convert(e)
? ? if e.result is None:
? ? ? ? return
? ? tgt_field_key = "F_BHR_MulBase"
? ? src_field_key = "F_BHR_MulBase"
? ? tgt_base_data_field = e.target_business_info.get_field(tgt_field_key)
? ? src_base_data_field = e.source_business_info.get_field(src_field_key)
? ? if tgt_base_data_field is None or src_base_data_field is None:
? ? ? ? return
? ? if tgt_base_data_field.element_type != 'ELEMENTTYPE_BILLHEAD':
? ? ? ? return
? ? if src_base_data_field.element_type != 'ELEMENTTYPE_BILLHEAD':
? ? ? ? return
? ? tgt_entity = tgt_base_data_field.entity
? ? target_entity_objs = e.result.find_by_entity_key(tgt_entity.key)
? ? src_pk_ids = set()
? ? for i in range(len(target_entity_objs)):
? ? ? ? target_entity_row = target_entity_objs[i]
? ? ? ? if target_entity_row.data_entity is None:
? ? ? ? ? ? continue
? ? ? ? src_entity_objs = target_entity_row['convert_source'] as List[Kingdee.BOS.Orm.DataEntity.DynamicObject]
? ? ? ? if src_entity_objs is None:
? ? ? ? ? ? continue
? ? ? ? for src_obj in src_entity_objs:
? ? ? ? ? ? if src_obj is None:
? ? ? ? ? ? ? ? continue
? ? ? ? ? ? src_pk_ids.add(src_obj[0])
? ? ? ? ? ??
? ? # 第二段代碼
? ? for src_base_data in src_mul_base:
? ? ? ? if src_base_data is None:
? ? ? ? ? ? continue
? ? ? ? # 引用屬性不一樣,重新加載數(shù)據(jù)
? ? ? ? src_base_data_id = (src_base_data[src_base_data_field.key])[0]
? ? ? ? if not base_data_obj_cache.get(srcBaseDataId):
? ? ? ? ? ? baseDataObjCache[srcBaseDataId] = Kingdee.BOS.ServiceHelper.BusinessDataServiceHelper.Load(self.context, { srcBaseDataId }, tgtBaseDataField.refFormDynamicObjectType)[0]
? ? ? ? tgtBaseDataObjRow = Kingdee.BOS.Orm.DataEntity.DynamicObject(tgtBaseDataField.refEntityDynamicObjectType)
? ? ? ? tgtBaseDataObjRow[tgtBaseDataField.refIDDynamicProperty] = srcBaseDataId
? ? ? ? tgtBaseDataObjRow[tgtBaseDataField.DynamicProperty] = baseDataObjCache[srcBaseDataId]
? ? ? ? tgtMulBaseData.add(tgtBaseDataObjRow) ?# 第三段代碼
我:繼續(xù)
python
# 第三段代碼
def load_data_to_target(self, src_data, tgt_data):
? ? if src_data is None or tgt_data is None:
? ? ? ? return
? ? for i in range(len(src_data)):
? ? ? ? src_row = src_data[i]
? ? ? ? if src_row.DataEntity is None:
? ? ? ? ? ? continue
? ? ? ? # 獲取多選基礎(chǔ)資料的數(shù)據(jù)
? ? ? ? src_bill_objs = src_row["ConvertSource"] as List[Kingdee.BOS.Orm.DataEntity.DynamicObject]
? ? ? ? if src_bill_objs is None:
? ? ? ? ? ? continue
? ? ? ? # 獲取多選基礎(chǔ)資料的數(shù)據(jù)的鍵值
? ? ? ? src_pk = src_bill_objs[0][0]
? ? ? ? # 根據(jù)鍵值獲取源單數(shù)據(jù)在目標(biāo)單據(jù)中的映射對(duì)象
? ? ? ? src_bill_obj = src_data[src_pk]
? ? ? ? # 獲取目標(biāo)單據(jù)中的多選基礎(chǔ)資料的數(shù)據(jù)集合
? ? ? ? tgt_mul_base = tgt_row.DataEntity[tgtBaseDataField.RefEntityDynamicProperty] as Kingdee.BOS.Orm.DataEntity.DynamicObjectCollection
? ? ? ? if tgt_mul_base is None:
? ? ? ? ? ? continue
? ? ? ? # 將源單數(shù)據(jù)集合添加到目標(biāo)單據(jù)的多選基礎(chǔ)資料的數(shù)據(jù)集合中
? ? ? ? tgt_mul_base.Add(src_bill_obj)
我:三段代碼匯總成一個(gè)完整的代碼,不要分段了。
百度AI:
以下是將三段代碼匯總成一個(gè)完整代碼的Python版本:
python
def after_convert(self, e):
? ? super().after_convert(e)
? ? if e.result is None:
? ? ? ? return
? ? tgt_field_key = "F_BHR_MulBase"
? ? src_field_key = "F_BHR_MulBase"
? ? tgt_base_data_field = e.target_business_info.get_field(tgt_field_key)
? ? src_base_data_field = e.source_business_info.get_field(src_field_key)
? ? if tgt_base_data_field is None or src_base_data_field is None:
? ? ? ? return
? ? if tgt_base_data_field.element_type != 'ELEMENTTYPE_BILLHEAD':
? ? ? ? return
? ? if src_base_data_field.element_type != 'ELEMENTTYPE_BILLHEAD':
? ? ? ? return
? ? tgt_entity = tgt_base_data_field.entity
? ? target_entity_objs = e.result.find_by_entity_key(tgt_entity.key)
? ? src_pk_ids = set()
? ? for i in range(len(target_entity_objs)):
? ? ? ? target_entity_row = target_entity_objs[i]
? ? ? ? if target_entity_row.data_entity is None:
? ? ? ? ? ? continue
? ? ? ? src_entity_objs = target_entity_row['convert_source'] as List[Kingdee.BOS.Orm.DataEntity.DynamicObject]
? ? ? ? if src_entity_objs is None:
? ? ? ? ? ? continue
? ? ? ? for src_obj in src_entity_objs:
? ? ? ? ? ? if src_obj is None:
? ? ? ? ? ? ? ? continue
? ? ? ? ? ? src_pk_ids.add(src_obj[0])
? ? ? ? ? ??
? ? baseDataObjCache = {}
? ? for src_base_data in srcMulBase:
? ? ? ? if src_base_data is None:
? ? ? ? ? ? continue
? ? ? ? srcBaseDataId = (src_base_data[srcBaseDataField.key])[0]
? ? ? ? if not baseDataObjCache.get(srcBaseDataId):
? ? ? ? ? ? baseDataObjCache[srcBaseDataId] = Kingdee.BOS.ServiceHelper.BusinessDataServiceHelper.Load(self.context, { srcBaseDataId }, tgtBaseDataField.refFormDynamicObjectType)[0]
? ? ? ? tgtBaseDataObjRow = Kingdee.BOS.Orm.DataEntity.DynamicObject(tgtBaseDataField.refEntityDynamicObjectType)
? ? ? ? tgtBaseDataObjRow[tgtBaseDataField.refIDDynamicProperty] = srcBaseDataId
? ? ? ? tgtBaseDataObjRow[tgtBaseDataField.DynamicProperty] = baseDataObjCache[srcBaseDataId]
? ? ? ? tgtMulBaseData.add(tgtBaseDataObjRow) ?
? ??
? ? for srcBillObj in srcBillObjsMap.values():
? ? ? ? if srcBillObj is None:
? ? ? ? ? ? continue
? ? ? ? srcMulBaseData = srcBillObj[srcBaseDataFieldKey] as Kingdee.BOS.Orm.DataEntity.DynamicObjectCollection
? ? ? ? if srcMulBaseData is None or len(srcMulBaseData) <= 0:
? ? ? ? ? ? continue
? ? ? ? tgtMulBaseDataColl = tgtEntityRow['ConvertSource'] as Kingdee.BOS.Orm.DataEntity.DynamicObjectCollection
? ? ? ? if tgtMulBaseDataColl is None:
? ? ? ? ? ? continue
? ? ? ? for tgtBillObj in tgtMulBaseDataColl:
? ? ? ? ? ? if tgtBillObj is None:
? ? ? ? ? ? ? ? continue ??
? ? ? ? ? ? # Load data to target ??
我:繼續(xù)
python
def load_data_to_target(self, src_data, tgt_data):
? ? if src_data is None or tgt_data is None:
? ? ? ? return
? ? for i in range(len(src_data)):
? ? ? ? src_row = src_data[i]
? ? ? ? if src_row.DataEntity is None:
? ? ? ? ? ? continue
? ? ? ? # 獲取多選基礎(chǔ)資料的數(shù)據(jù)
? ? ? ? src_bill_objs = src_row["ConvertSource"] as List[Kingdee.BOS.Orm.DataEntity.DynamicObject]
? ? ? ? if src_bill_objs is None:
? ? ? ? ? ? continue
? ? ? ? # 獲取多選基礎(chǔ)資料的數(shù)據(jù)的鍵值
? ? ? ? src_pk = src_bill_objs[0][0]
? ? ? ? # 根據(jù)鍵值獲取源單數(shù)據(jù)在目標(biāo)單據(jù)中的映射對(duì)象
? ? ? ? src_bill_obj = src_data[src_pk]
? ? ? ? # 獲取目標(biāo)單據(jù)中的多選基礎(chǔ)資料的數(shù)據(jù)集合
? ? ? ? tgt_mul_base = tgt_row.DataEntity[tgtBaseDataField.RefEntityDynamicProperty] as Kingdee.BOS.Orm.DataEntity.DynamicObjectCollection
? ? ? ? if tgt_mul_base is None:
? ? ? ? ? ? continue
? ? ? ? # 將源單數(shù)據(jù)集合添加到目標(biāo)單據(jù)的多選基礎(chǔ)資料的數(shù)據(jù)集合中
? ? ? ? tgt_mul_base.Add(src_bill_obj)
后邊再繼續(xù),就一直重復(fù)了。
不得不說(shuō),現(xiàn)在的AI還是比較智能的,能夠分析代碼,分析語(yǔ)義,但是還是不能真正解決問(wèn)題。需要再手工調(diào)整。
CSDN的AI更加高大上,直接提供轉(zhuǎn)化工具,一勞永逸。百度AI認(rèn)真分析和解答。各有千秋。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-774609.html
以上就是測(cè)試的CSDN的AI和百度AI的過(guò)程。各位朋友們,還有哪些好用的AI,歡迎留言分享。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-774609.html
到了這里,關(guān)于人工智能CSDN版AI和百度AI代碼轉(zhuǎn)化測(cè)試,C#、Java代碼轉(zhuǎn)Python的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!