U9培训记录

摘要:
--C: ProgramFilesMicrosoftSDKsWindowsv7.0ABin可以通过执行以下操作之一解决此问题:1)安装Microsoft Windows SDK。3) 手动将上述注册表项设置到正确的位置。4) 将正确的位置传递到任务的ToolPath参数中。[D:CodeBEWorkApplyBEDeployWorkApplyBE.Deploy.csproj]解决方案如下:计算机上的一些C:ProgramFilesMicrosoftSDKsWindowsv10.0AinNETFX4.6.1ToolsC:ProgramFiles MicrosoftSDKs Windowsv7.0Ain需要复制两个文件才能找到安装了.Net 3.5或vs2010的计算机。复制ResGen。exe和resgen.exe。C:ProgramFilesMicrosoftSDKsWindowsv7.0AB中的配置……UBFV50U9.VOB。产品元数据应用UFIDA。U9、CBO。出版物BE。M etaData.dll…UBFV50U9.VBB.Product.MetadataUBFUFIDA.U9.Base.BaseBE.MetaData。Dll--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------添加两个U9基本实体引用。在“发布对象”列和“选择目录”中添加两个引用,拖放UFIDA.U9.CBO.SubBE。APP和UFIDA.U9.Base.BaseBE下的MetaData。UBF下的MetaData到解决方案选项卡的参考参考。

C:WindowsMicrosoft.NETFramework64v4.0.30319Microsoft.Common.targets(2318,5): error MSB3091: 任务失败,因为未找到“resgen.exe”,
或未安装正确的 Microsoft Windows SDK。
任务正在注册表项 HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SDKsWindowsv7.0AWinSDK-NetFx35Tools-x86 的 InstallationFolder 值中所指定位置下的“bin”子目录中查找“resgen.exe”。
--C:Program Files (x86)Microsoft SDKsWindowsv7.0ABin
通过执行下列操作之一可以解决此问题:
1) 安装 Microsoft Windows SDK。
2) 安装 Visual Studio 2010。
3) 手动向正确的位置设置上面的注册表项。
4) 将正确的位置传入任务的“ToolPath”参数中。 [D:CodeBEWorkApplyBEDeployWorkApplyBE.Deploy.csproj]

解决方法如下:

电脑上有的
C:Program Files (x86)Microsoft SDKsWindowsv10.0AinNETFX 4.6.1 Tools

C:Program Files (x86)Microsoft SDKsWindowsv7.0Ain 就两个文件夹 NETFX 4.0 Tools 和 x64 报错时需要复制两个文件过来

找安装了..net 3.5或者是vs2010的机器上面 到
C:Program Files (x86)Microsoft SDKsWindowsv7.0ABin里
复制 ResGen.exe 和 resgen.exe.config


.....UBFV50U9.VOB.Product.MetadataAppUFIDA.U9.CBO.PubBE.MetaData.dll
...UBFV50U9.VOB.Product.MetadataUBFUFIDA.U9.Base.BaseBE.MetaData.dll
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
添加U9两个基础实体引用
添加2个引用,在发布对象栏目中,在选择目录中,将APP下面的UFIDA.U9.CBO.PubBE.MetaData和UBF下面的UFIDA.U9.Base.BaseBE.MetaData拖放到解决方案页签的Reference引用下。
(注:在引用解决方案时,先要双击打开所引用的MetaData,然后拖到Reference中)

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
添加U9系统的2个基本UI 引用和客开的UI引用;
(UI->UFIDA.U9.CBO.Ref.BaseReferenceUI.MetaData
和UI->UFIDA.U9.CBO.Ref.CBOReferenceUI.MetaData)

把要显示的实体属性一个个拖到界面中。(ID和事务版本栏位设置隐藏)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
UI给控件赋默认值,UI的解决方案会生成三个文件夹,Action、Model、WebPart
在Model文件夹里修改界面的默认值
public override void AfterInitModel()
{
this.CustSO.FiledBussinessDate.DefaultValue=DateTime.Now;//CustSO是建的UI界面,BussinessDate是BE里面建的字段
}
在WebPart文件夹里的JiangWorkApplyUIFormWebPartCodeBehindExtend.cs里可以修改弹性域还有查询按钮的设置 以及 设置默认行号
public void AfterCreateChildControls()
{
//开启个性化
UFIDA.U9.UI.PDHelper.PersonalizationHelper.SetPersonalizationEnable((BaseWebForm)this, true);
//查询按钮设置
PDFormMessage.ShowConfirmDialog(this.Page, "5d46aade-63f8-469e-9512-84ea1d2d95c1 ", "580", "408", "标题名称", wpFindID.ClientID, this.BtnFind, null);

//弹性域设置
//处理表头弹性域
FlexFieldHelper.SetDescFlexField(new DescFlexFieldParameter[] { new DescFlexFieldParameter(this.FlexFieldPicker0, this.Model.WorkApplyHead) });
//处理表体弹性域处理,需要UIForm中表体最后一列添加一个Text的列.平台代码自动实现,DescFlexField为BE里定义的扩展字段名称
FlexFieldHelper.SetDescFlexField(this.DataGrid5, this.DataGrid5.Columns.Count - 1, "DescFlexField");

//查询按钮设置
PDFormMessage.ShowConfirmDialog(this.Page, "007a3c50-39d3-4223-8ce6-8f9952d6daae", "580", "408", "改为自己的参照的FormID", wpFindID.ClientID, this.BtnFind, null);


//取得提示信息资源:是否删除当前记录
string message = PDResource.GetDeleteConfirmInfo();
//绑定注册弹出对话框到删除按钮
PDFormMessage.ShowConfirmDialog(this.Page, message, "", this.BtnDelete);
PDFormMessage.ShowConfirmDialog(this.Page, "确认放弃当前记录?", "", this.BtnCancel);

//设置默认行号
GetProfileValueProxy bpObj = new GetProfileValueProxy();//需要添加引用:U9.VOB.Product.ComponentUBFUFIDA.U9.Base.BaseBP.Deploy.dll和UFIDA.U9.Base.BaseBP.Agent.dll文件。
bpObj.ProfileCode = "SysLineNo";
PVDTOData pVTDOData = bpObj.Do();
//行GRID
((IAutoRowNo)this.DataGrid5.Columns["RowNo"]).Sequence = true;
((IAutoRowNo)this.DataGrid5.Columns["RowNo"]).SequenceStep = Int32.Parse(pVTDOData.ProfileValue);
((IAutoRowNo)this.DataGrid5.Columns["RowNo"]).SequenceStart = Int32.Parse(pVTDOData.ProfileValue);

}
在按钮事件里 获取当时页面提交的数据
this.Model.WorkApplyHead.FocusedRecord.SysVersion //获取当前的数据

this.Action.NavigateAction.Refresh(null); //按钮事件里 刷新页面

this.docNO131.ReadOnly = true;//设为只读状态 已弃用
((IUIFieldBindingDataBindControl)this.docNO131).ReadOnly = true; //单据表头里面(上部分)里的字段设为只读状态
//表格里的列单号,改为只读
((UFSoft.UBF.UI.WebControlAdapter.UFWebTextBoxColumnWrapper)this.DataGrid5.Columns["DocNo"]).Enable = false;//表格列单号,改为只读
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--在BE中设置枚举的默认值时,如果默认值填的是-1那么界面显示时可以留空
--同步单个枚举
declare @FN varchar(550),
@ClsID bigint,
@UID varchar(50)
select @FN='UFIDA.U9.Cust.VW.SO.SOSPRBE.VWPubBE.YearAreaTypeEnum' --此处只需填入你要更新的枚举FullName(自已建的枚举的全名称),示例为标准产品的业务员类型枚举
select @ClsID=Local_ID,@UID=ID from UBF_MD_Class where FullName =@FN and ClassType=3
select @ClsID,@UID
--先删除已有的数据
delete from UBF_Sys_ExtEnumType_Trl where ID=@ClsID or ID in (select ID from ubf_sys_extenumtype where UID=@UID)
delete from ubf_sys_extenumtype where ID=@ClsID or UID=@UID
delete from UBF_Sys_ExtEnumValue_Trl where ID in (select ID from ubf_sys_extenumvalue where ExtEnumType=@ClsID or ExtEnumTypeUID=@UID)
delete from ubf_sys_extenumvalue where ExtEnumType=@ClsID or ExtEnumTypeUID=@UID
--下面为插入最新数据
insert into ubf_sys_extenumtype
select local_id as id,'20101111','demo','20101111','demo',0,fullname as code,isextend,id as uid,0
from ubf_md_class where Local_ID = @ClsID

insert into ubf_sys_extenumtype_trl
select a.local_id as id,'zh-CN',b.[displayname] as [name],b.[Description]
from ubf_md_class a
left join ubf_RES_resourcevalue b on cast(a.[iD] as varchar(50)) = cast(b.resourcename as varchar(50))
where Local_ID = @ClsID

insert into ubf_sys_extenumvalue
select a.local_id as id,'20101111','demo','20101111','demo',0,a.[Local_Class_ID] as ExtEnumType ,
a.[name] as code,a.defaultvalue as evalue,issystem,md_class_id as ExtEnumTypeUID
from ubf_md_attribute as a
inner join ubf_md_class as b on cast(a.md_class_id as varchar(50))=cast(b.id as varchar(50))
where b.Local_ID = @ClsID

insert into ubf_sys_extenumvalue_trl
select a.local_id as id,'zh-CN',c.[displayname] as [name]
from ubf_md_attribute as a
inner join ubf_md_class as b on cast(a.md_class_id as varchar(50))=cast(b.id as varchar(50))
left join ubf_RES_resourcevalue c on cast(a.[ID] as varchar(50)) = cast(c.resourcename as varchar(50))

where b.Local_ID = @ClsID


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
这里控制按钮状态 在WebPart文件夹里Extend.cs中的
public void AfterUIModelBinding()
{
//这里控制按钮状态

}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
BP实例化用代理类 引用BP解决方案里面的 BpAgentin下面的dll文件UFIDA.U9.WK.Jiang.JiangWorkApplyBP.Agent.dll和UFIDA.U9.WK.Jiang.JiangWorkApplyBP.Deploy.dll,
代理类的类名为原BP类后面加上Proxy , BP组件只需要发布一次
UFIDA.U9.WK.Jiang.JiangWorkApplyBP.Proxy.ApproveSOProxy bpSo = new Jiang.JiangWorkApplyBP.Proxy.ApproveSOProxy();


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
BP 里面的DO方法
public override object Do(object obj)
{
CreatCustSO bpObj = (CreatCustSO)obj;

//get business operation context is as follows
//IContext context = ContextManager.Context

//auto generating code end,underside is user custom code
//and if you Implement replace this Exception Code...

if (bpObj == null)
return null;
if (bpObj.SODataDTOList == null || bpObj.SODataDTOList.Count == 0)
throw new Exception("请选择数据");
long createSOID = 0;
using (ISession session= Session.Open())
{
UFIDA.U9.Cust.CustTrain.CBO.CustTrainBE.CustSO custso = UFIDA.U9.Cust.CustTrain.CBO.CustTrainBE.CustSO.Create();
UFIDA.U9.Cust.CustTrain.CBO.CustTrainBE.CustSODocType docType = UFIDA.U9.Cust.CustTrain.CBO.CustTrainBE.CustSODocType.Finder.Find("DocHeaderSequenceStyle=0");
if (docType == null)
throw new Exception("请维护客开销售订单的单据类型,且编号方式为“自动编号”");
custso.SODocType = docType;
custso.BusinessDate = DateTime.Now;
U9.CBO.SCM.Customer.Customer customer = U9.CBO.SCM.Customer.Customer.Finder.FindByID(bpObj.SODataDTOList[0].Customer);

custso.CustomerKey = customer.Key;
UFIDA.U9.Cust.CustTrain.CBO.CustTrainBE.CustSOLine soLine = null;

//设置默认行号
GetProfileValueProxy bpObjLineNo = new GetProfileValueProxy();
//需要添加引用:..U9.VOB.Product.ComponentUBFUFIDA.U9.Base.BaseBP.Deploy.dll和UFIDA.U9.Base.BaseBP.Agent.dll文件。
bpObjLineNo.ProfileCode = "SysLineNo";
PVDTOData pVTDOData = bpObjLineNo.Do();
int docLine = Convert.ToInt32(pVTDOData.ProfileValue);
foreach (SODataDTO dto in bpObj.SODataDTOList)
{
soLine = UFIDA.U9.Cust.CustTrain.CBO.CustTrainBE.CustSOLine.Create(custso);
soLine.DocLineNo = docLine;
UFIDA.U9.CBO.SCM.Item.ItemMaster item = UFIDA.U9.CBO.SCM.Item.ItemMaster.Finder.FindByID(dto.Item);
if (item == null)
throw new Exception("传入料品ID字段找不到相关数据");
soLine.ItemMasterKey = item.Key;
soLine.Price = dto.Price;
soLine.Qty = dto.Qty;
soLine.Money = dto.Price * dto.Qty;
soLine.UOM = item.InventoryUOM;
docLine += Convert.ToInt32(pVTDOData.ProfileValue);
}
session.Commit();
createSOID = custso.ID;
}
return createSOID;
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
客户与料品的实体都在 APP/UFIDA.U9.CBO.PubBE.dll里
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在BP与BE代码里获取当前组织的ID,需要引用D:YonyouUBFV50U9.VOB.Product.UBFUBFStudioRuntimeUFIDA.U9.Base.BaseBE.dll
D:YonyouUBFV50U9.VOB.Product.UBFUBFStudioRuntimeUFIDA.U9.Base.BaseBE.Deploy.dll
D:YonyouUBFV50U9.VOB.Product.UBFUBFStudioRuntimeUFIDA.U9.Base.Util.dll
UFIDA.U9.Base.Context.LoginOrg.ID // 在BP与BE代码里获取当前组织的ID.UI里不能用

PlatformContext.Current.OrgID //UI代码里获取当前组织的ID

UI:引用:UFIDA.U9.UI.PDHelper.dll
UFIDA.U9.UI.PDHelper.PDContext.Current 中取上下文信息
BP/BE/SV;引用:UFIDA.U9.Base.BaseBE.dll
 UFIDA.U9.Base.Context 中获取上下文信息

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在浏览器里查看Grid中的字段名称 让到该form的url 然后在地址后面加上&__dm=true
http://192.168.0.98/U9/ufsoft/simple.aspx?lnk=aba2a55e-cb1a-4cb9-95ec-086a714880e0&chromeType=4&ShowType=ShowModal&ParentTaskID=a5af675a-cf25-4007-a9dd-a12c3fc0ad49&__sk=__SK88543&__curOId=1001609280000268&RefereshThis=1&ShowAtlasModalDialog=true&__dm=true
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#region 自定义数据初始化加载和数据收集
private void OnLoadData_Extend(object sender)
{
if (this.Model.JiangWorkApplyUI2HeadView==null)
{
this.Model.JiangWorkApplyUI2HeadView.AddNewUIRecord(); //防止数据为空
}
OnLoadData_DefaultImpl(sender);
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
弹出指定的formid
this.ShowModalDialog("948ddddb-5598-4115-b9f5-2fd4ecdced6a", "加工清单", "960", "520", null, null);
this.ShowAtlasModalDialog("948ddddb-5598-4115-b9f5-2fd4ecdced6a", "加工清单", "960", "520", this.TaskId.ToString(), null,false,false,false);
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
页面绑定数据清除代码
this.Model.JiangWorkApplyUI2SubView.Records.Clear();
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
实体名称 客户 Customer app目录下 命名空间为 ufida.u9.cbo.scm.customer::Customer 程序集为 ufida.u9.cbo.pubbe.dll 后台的所有BE程序集在ApplicationServerlibs目录下
实体名称 料品 ItemMaster app目录下 命名空间为 UFIDA::U9::CBO::SCM::Item::ItemMaster 程序集为 UFIDA.U9.CBO.PubBE.dll

实体名称 销售订单 SO app目录下 命名空间为 UFIDA::U9::SM::SO::SO 程序集为 UFIDA.U9.SM.SMBE.dll
实体名称 销售订单行 SOLine app目录下 命名空间为 UFIDA::U9::SM::SO::SOLine 程序集为 UFIDA.U9.SM.SMBE.dll
实体名称 销售订单子行 SOShipline app目录下 命名空间为 UFIDA::U9::SM::SO::SOShipline 程序集为 UFIDA.U9.SM.SMBE.dll
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
用sql 查询 引用 D:YonyouUBFV50U9.VOB.Product.UBFUBFStudioRuntimeUFSoft.UBF.Util.Data.dll
D:YonyouUBFV50U9.VOB.Product.UBFUBFStudioRuntimeUFSoft.UBF.Util.DataAccess.dll
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
BusinessEntity 业务实体基类 所有的BE类多会继承该类 public abstract class BusinessEntity : Entity

WorkApplySub.EntityList workApplyEntityList = WorkApplySub.Finder.FindAll(sb.ToString()); //BE类查询操作 得到多条结果
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
取form里面的数据
string doccode = this.doccode164.Text;
//另一种获取方法
// string doccode = this.Model.JiangWorkApplyUI2HeadView.FocusedRecord.doccode;

//当页面上面没有数据时 想查询所有数据, 先把mode添加一条默认的实现
#region 自定义数据初始化加载和数据收集
private void OnLoadData_Extend(object sender)
{
if (this.Model.JiangWorkApplyUI2HeadView==null)
{
//对当前的View产生一个新的记录对象并加入View的记录集中.
int index=this.JiangWorkApplyUI2HeadView.FocuseedIndex;
IUIRecord newRecord= this.Model.JiangWorkApplyUI2HeadView.AddNewUIRecord(); //防止数据为空,在卡片做"新增"等操作时,需要增加一条空Record,这条记录与界面完成绑定,达到清空界面的效果
if(this.JiangWorkApplyUI2HeadView.RecordCount==0 || index<0) index=0;
this.JiangWorkApplyUI2HeadView.Records.Insert(index,newRecord);
this.JiangWorkApplyUI2HeadView.FocuseRecord=newRecord;

}
OnLoadData_DefaultImpl(sender);
}
------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
表格列单号,改为只读
((UFSoft.UBF.UI.WebControlAdapter.UFWebTextBoxColumnWrapper)this.DataGrid5.Columns["DocNo"]).Enable = false;//表格列单号,改为只读
------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
关闭当前窗体
this.CloseDialog(true);
------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
获取Grid中选中行的数据
this.Model.JiangWorkApplyUI2SubView.GetSelectRecords()

跨页面传输数据 当前缓存对象,Session级
this.CurrentSessionState["custSOID"] = "需要传输到其它页面的值或对象";

当前缓存对象,Page级
this.CurrentState["custSOID"] = "需要传输到其它页面的值或对象";

用法:
private void BtnOk_Click_Extend(object sender, EventArgs e)
{
//调用模版提供的默认实现.--默认实现可能会调用相应的Action.
if (this.Model.InstrumentDoorHeadView.SelectRecords.Count > 0)
{
CurrentState["WKInstrumentDoor"] = this.Model.InstrumentDoorHeadView;
}
else
{
throw new Exception("请选择要生成的单据行");
}
CloseDialog(true);

BtnOk_Click_DefaultImpl(sender,e);
}

//获取列表中选择的数据,代码写在列表UI里
private void OnOk0_Click_Extend(object sender, EventArgs e)
{
IList<IUIRecord> list = this.Model.POShipLine.Cache.GetSalectRecord(); //获取选中的行 放到集合list中去
foreach(IUIRecord record in list)
{
string po = record["MainID"].ToString();//主实体的ID
string id = record["ID"].ToString();//销售订单行(子实体的ID)

}

}

页面加载UIModel之前,指定跳转到指定的记录id
public void BeforeUIModelBinding()
{
if (this.CurrentSessionState["custID"]!=null)
{
this.Action.NavigateAction.MovePageAt(null, Convert.ToInt32(this.CurrentSessionState["custID"]));
this.CurrentSessionState["custID"] = null;
}
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
单据界面调转到列表:
private void ListClick_Extend(object sender, UIActionEventArgs e)
{
this.CurrentPart.NavigatePage("列表的URI(装配 工具里面)", null);
}
列表跳转到单据:
private void OnGridRowDbClick_Extend(object sender, UIActionEventArgs e)//默认双击行事件
{

string dataId = this.CurrentModel.ItemMatchParameter.FocusedRecord["MainID"].ToString();

OnNavigatCard("Browse", dataId, "单据界面的URI(装配工具中)"); //调用下面自已写的方法
//调用模版定义的默认实现方法.如需扩展,请直接在此编程.
this.OnGridRowDbClick_DefaultImpl(sender,e);
}
private void OnNavigatCard(string type, string dataID, string formID)
{
string FormID = formID;//AddFormID
string DataID = dataID;
System.Collections.Specialized.NameValueCollection nameValCol = new System.Collections.Specialized.NameValueCollection();
nameValCol.Add("PDPageStatus", type);//参数:界面状态
nameValCol.Add("ID", DataID);//参数ID
this.CommonAction.CurrentPart.NavigatePage(FormID, nameValCol);
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


免责声明:文章转载自《U9培训记录》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android API之onLayout, onMeasure程序员必备的代码审查(Code Review)清单【转载】下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

iview中modal如何修改标题颜色

modal默认设置transfer属性为true,然后整个弹窗就在body的下一层,所以样式修改失败,直接设置为false就可以修改样式了修改标题颜色,当然设置transfer为false后也可以修改modal中的其他样式:.ivu-modal-header-inner{color:#ba9759;}...

Spark 数据读取与保存(输入、输出)

SaveAsTextFile(字符串)scala&gt:importsscala.util.parsing.json.json(2)将json文件上载到HDFS[lxl@hadoop102spark]$hadoopfs投入。/示例/src/main/resources/people。json/(3)读取文件scala&gt;...

当微信小程序遇到AR(二)

当微信小程序遇到AR,会擦出怎么样的火花?期待与激动......通过该教程,可以从基础开始打造一个微信小程序的AR框架,所有代码开源,提供大家学习。注册地址=˃注册成功之后,需要下载微信小程序开发工具。下载地址=˃目前笔者的开发环境是:Windows10下载的微信小程序版本为:RCv1.0.2.1909111 打开,微信开发者工具之后,会看到如下的页面。...

C#控件重绘学习(一)

由于需要制作工业控制软件,传统的控制已不能满足实际要求,因此控制的重新绘制迫在眉睫。因为考研花费了很多时间,而C#的学习已经搁浅了很长时间,所以我打算借此机会仔细彻底地研究控件的重新绘制。首先,查看Button的旧背景:namespace:SystemWindows.Forms程序集:System.Windows.FormsButton具有太多属性:例如Ba...

wifi密码暴力破解

转自:Python最新暴力破解WiFi,攻破所有密码限制,最强破解!...

DB2字符函数简介及使用

Param2可以是编码单元16-16位UTF-16编码,也就是说,字符串表示为16位UTF-18编码字符串。Codeunits32-32位UTF-32编码,即字符串表示为32位UTF 32编码字符串。请注意,定义为FORBITDATA的字符串不能转换为图形字符。如果length<length,则来自的原始字符串短于结果中的长度。...