通过脚本创建基础列映射(ColumnMaps)

2020-08-15 07:39发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


Hello PowerDesigner社区,

我目前正在开发PowerShell脚本(后来称为PD脚本),该脚本应该能够复制表的映射,但是新的映射基于新的数据源。

这是我到目前为止所拥有的:

 ## ToDo在运行脚本之前
 ###!必须打开所有相关模型
 ###!新数据源必须已经在目标模型中创建
 ###!更改并验证初始变量名称
 ##!初始化变量名
 $ targetModelName ='Test_Stage'
 $ duplicatedTableName ='StageTable47'
 $ oldSourceModelName ='测试来源'
 $ oldDatasourceName ='DataSource_Source2Stage'
 $ newSourceModelName ='重复的测试_来源'
 $ newDatasourceName ='DataSource_Duplicated_Src2Stage'

 ##将PowerDesigner窗口获取为新对象
 $ powerDesigner =新对象-com powerdesigner.application

 ##选择目标模型作为对象,并选择要更改映射的重复表
 $ targetModel = $ powerDesigner.Models | 其中代码-eq $ targetModelName
 $ duplicatedTable = $ targetModel.Tables | 其中代码-eq $ duplicatedTableName

 ##选择新的和旧的源模型以设置或获取映射的属性
 $ newSourceModel = $ powerDesigner.Models | 其中代码-eq $ newSourceModelName
 $ oldSourceModel = $ powerDesigner.Models | 其中代码-eq $ oldSourceModelName

 ##选择新的和旧的数据源
 $ datasourceFrom = $ targetModel.DataSources | 其中代码-eq
 $ oldDatasourceName $ datasourceTo = $ targetModel.DataSources | 其中代码-eq $ newDatasourceName

 #选择旧的映射(也重复了)
 $ oldMapping = $ datasourceFrom.GetMapping($ duplicatedTable)

 #在重复的表上创建一个新的映射
 $ newMapping = $ datasourceTo.CreateMapping($ duplicatedTable)

 #为新映射设置一些属性
 $ newMapping.SetAttribute('名称',-join($ oldMapping.Name,'_ duplicated'))
 $ newMapping.SetAttribute('Code',-join($ oldMapping.Code,'_ duplicated'))

 #将新的源表(来自新的数据源)添加到新的映射中
 $ newSourceTable = $ newSourceModel.Tables | 其中代码-eq $ oldMapping.MappedTo
 $ newMapping.AddSource($ newSourceTable)

我的问题是:现在如何创建新的基本列映射,使其与旧的映射完全一样,但是以新的数据源为父级。

我尝试复制旧的基本列映射,但这并没有改变父级

我还尝试在$ newMapping的ColumnMaps集合上使用CreateNew()方法,但是这导致BaseColumnMapping中的列为空,这是我创建后无法更改的只读属性。

我需要方法(构造函数)来创建具有指定列的基础列映射。

谢谢

斯蒂芬

更新:

一些附加信息:

使用脚本后,当前的"映射编辑器"如下所示:

(311.0 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


Hello PowerDesigner社区,

我目前正在开发PowerShell脚本(后来称为PD脚本),该脚本应该能够复制表的映射,但是新的映射基于新的数据源。

这是我到目前为止所拥有的:

 ## ToDo在运行脚本之前
 ###!必须打开所有相关模型
 ###!新数据源必须已经在目标模型中创建
 ###!更改并验证初始变量名称
 ##!初始化变量名
 $ targetModelName ='Test_Stage'
 $ duplicatedTableName ='StageTable47'
 $ oldSourceModelName ='测试来源'
 $ oldDatasourceName ='DataSource_Source2Stage'
 $ newSourceModelName ='重复的测试_来源'
 $ newDatasourceName ='DataSource_Duplicated_Src2Stage'

 ##将PowerDesigner窗口获取为新对象
 $ powerDesigner =新对象-com powerdesigner.application

 ##选择目标模型作为对象,并选择要更改映射的重复表
 $ targetModel = $ powerDesigner.Models | 其中代码-eq $ targetModelName
 $ duplicatedTable = $ targetModel.Tables | 其中代码-eq $ duplicatedTableName

 ##选择新的和旧的源模型以设置或获取映射的属性
 $ newSourceModel = $ powerDesigner.Models | 其中代码-eq $ newSourceModelName
 $ oldSourceModel = $ powerDesigner.Models | 其中代码-eq $ oldSourceModelName

 ##选择新的和旧的数据源
 $ datasourceFrom = $ targetModel.DataSources | 其中代码-eq
 $ oldDatasourceName $ datasourceTo = $ targetModel.DataSources | 其中代码-eq $ newDatasourceName

 #选择旧的映射(也重复了)
 $ oldMapping = $ datasourceFrom.GetMapping($ duplicatedTable)

 #在重复的表上创建一个新的映射
 $ newMapping = $ datasourceTo.CreateMapping($ duplicatedTable)

 #为新映射设置一些属性
 $ newMapping.SetAttribute('名称',-join($ oldMapping.Name,'_ duplicated'))
 $ newMapping.SetAttribute('Code',-join($ oldMapping.Code,'_ duplicated'))

 #将新的源表(来自新的数据源)添加到新的映射中
 $ newSourceTable = $ newSourceModel.Tables | 其中代码-eq $ oldMapping.MappedTo
 $ newMapping.AddSource($ newSourceTable)

我的问题是:现在如何创建新的基本列映射,使其与旧的映射完全一样,但是以新的数据源为父级。

我尝试复制旧的基本列映射,但这并没有改变父级

我还尝试在$ newMapping的ColumnMaps集合上使用CreateNew()方法,但是这导致BaseColumnMapping中的列为空,这是我创建后无法更改的只读属性。

我需要方法(构造函数)来创建具有指定列的基础列映射。

谢谢

斯蒂芬

更新:

一些附加信息:

使用脚本后,当前的"映射编辑器"如下所示:

(311.0 kB)
付费偷看设置
发送
4条回答
nice_wp
1楼-- · 2020-08-15 08:08

我最近写了一个脚本来导入映射。 像您一样,我花了一段时间才弄清楚如何创建对象和子对象映射(文档可能会更有用,但是我看到的数据建模工具文档却差得多)。

我的 方法是使用CreateMapping方法向数据源添加表映射,然后再次使用CreateMapping方法向表映射添加列映射。

蓋茨
2楼-- · 2020-08-15 08:02

我怀疑您需要 告诉Excel导入以搜索其他模型中的引用对象-请参阅导入选项

shere_lin
3楼-- · 2020-08-15 07:59

我想我自己找到了答案:

#为旧表映射中的每个列映射添加新表映射中的列映射

 foreach($ oldTableMapping.ColumnMaps中的$ oldColMapping)
 {
 $ targetColumn = $ duplicatedTable.Columns | 其中代码-eq $ oldColMapping.Column.Code
 Write-Host'为$ targetColumn.Code创建新的列映射
 $ newColumnMapping = $ DatasourceTo.CreateMapping($ targetColumn)
 $ newColumnMapping.MappedTo = $ oldColMapping.MappedTo
 } 

如果有人有更好的解决方案,或者在某些情况下这种方式会产生错误,请告诉我。 我的第一个测试适用于我的小示例。

基本的理解问题如下:您可以在表的数据源和列的表上使用CreateMapping方法。 这对我来说很难在文档中看到。

灬番茄
4楼-- · 2020-08-15 08:01

Stephan,乔治,

您是否尝试过ExcelImport,这可能有效吗?

我不是程序员,并且还不能轻松访问(很不幸)。

我试图通过ExcelImport进行相同的操作。 我打算:
-首先,导入数据源
-然后,映射(实体到表)
-然后,SubObjectMappings(属性到列)

我已经被数据源困住了。

我的excel中的数据(1行):

导入时,我得到:1条警告已记录到输出窗口中。

打开文档C:\ Users \ \ Desktop \ export DS.xls从表中导入数据
DS 16:59:53
错误:找不到名称= LDM_2 1的对象 对象已更新
关闭文档导出DS.xls 16:59:54

LDM_2已在我的工作区中打开,并且是逻辑数据模型。

已创建数据源对象,并正确设置了名称,模型类型和访问类型,但未设置模型(如日志所示)。

问题似乎与"模型"选项卡有关。 如果尝试手动添加模型,则它指向"物理模型"类型(而不是模型类型"逻辑数据模型")。 这似乎是标准行为(我可以复制)。

因此,我想到了:也许我正在以错误的方式进行操作。

Excel是否会为我想做的事情导入死胡同?

致敬Raf

一周热门 更多>