我正在尝试使用sap.ushell.Container的个性化服务在SAPUI5中实现变体管理。我已经编写了保存,管理(删除,重命名(并从下拉列表中选择变体的功能。但是,当我在下面提到的方法中选择变体时,我看到了奇怪的行为。
onSelectVariant: function (oEvent) {
var sSelectedVariantKey = oEvent.getParameter('key');
假设我有现有的变体"A1"、"A2"和"A3"。 当我保存为具有新值的新变体(我们称之为"X1"(时,将创建新变体。然后我从下拉列表中选择另一个已经存在的变体(A1 或 A2 或 A3(,我看到相应的值。现在我再次选择新创建的变体 X1,但我没有看到新值。
当我调试上述方法时,我看到对于所有现有变体,oEvent.getParameter('key')
返回变体索引,如 0,1,2,3 等,但对于新创建的变体 X1,它返回值'sv1579082806311',因此在变体集中找不到它
oPersonalizationVariantSet.getVariant(sVariantKey)
然后它不显示新值。
如果我再次运行该程序,我看到以前创建的变体 X1 现在显示正确的值,因为该方法oEvent.getParameter('key')
返回索引而不是"sv...."。 但是,如果我现在创建一个新的变体 X2,X2 也会发生同样的问题。
我在云WebIDE上运行该应用程序,而不是在FIORI启动板上运行。
有人可以帮助我在保存变体时可能出现什么问题吗?
谢谢
溴 尼莱什·普拉尼克
我最近遇到了完全相同的问题。我假设这是变体管理控件中的一个错误。您可以在openui5 github项目中创建一个问题。
我也遇到了这个问题,并得出结论,这是 VM 控制中的一个错误。 它为新保存的变体提供了一个新的长密钥。 在 onSelect 函数的 oEvent 参数 "key" 中,您将看到这个新键。
我通过向绑定变体的 JSON 对象添加一个新属性来解决这个问题。 在变体保存事件中:
tableModel.oData.tabVariants.push({key: VariantParam.key,
text: VariantParam.name,
newKey:this.oVariant.getVariantKey()})
然后在变体选择事件中:
var selectedKey = oEvent.getParameter("key");
var variant = this.woTableSet.getVariant(selectedKey);
if(!variant){
//In this case its a newly created variant with an internal key
//This is a workaround for the key confusion in variants
selectedKey = tableModel.oData.tabVariants.find(t => t.key ===
selectedKey).newKey;
variant = this.woTableSet.getVariant(selectedKey)
if(!variant){return} //then I give up
}
您需要将自动生成的密钥替换为变体密钥:
const autoGeneratedKey = oEvent.getParameters().key;
this.oContainer.save().done(function (cb) {
const oVM = that.getView().byId("vm");
oVM.replaceKey(autoGeneratedKey, that.oVariant.getVariantKey());
oVM.setInitialSelectionKey(that.oVariant.getVariantKey());
});