Lightswitch HTML 客户端 - 在创建屏幕时设置模式选择器值
Lightswitch HTML Client - set modal picker value when screen created
我现在对此进行了大量研究,但没有一个示例有帮助或适用。我想要做的是当用户加载添加屏幕时,我希望详细信息选择器在创建屏幕时显示一个名称,而不是每次都必须 select 它。我相信这可以做到,但我的 javascript 技能不足。
感谢您的帮助,
下面是一个例子:
此名称存储在 table 中,可以在此模态 picker/details 选择器中搜索,但您可以想象,如果 50% 的时间需要此值,则手动添加它不仅费时而且会变得有点乏味
在每个项目上按 post render
后,可以使用 contentItem.value
或 element.innerText
来操作文本框,但这不适用于这种类型的控件,我看到了出现以下错误:
这里有一些有用的信息,可能会有所帮助:
- ProjectData(数据源)
- 主屏幕引用 OrderRequest
- 外键 link 引用 ShippingContact 并在 DetailsPicker
上搜索 CustomerName
根据下面的回答,我是否需要替换任何东西到 top 函数,然后在代码的第二部分,你写的地方 defaultLookup(screen.Customer, "Contact", "Contacts",
这里需要做什么?
我试图改变的例子,不幸的是这不起作用
var defaultValue = "Test User";
var filter = "(ContactName eq " + msls._toODataString(defaultValue, ":String") + ")";
defaultLookup(screen.OrderRequest, "ContactName", "ShippingContacts", { filter: filter });
有相同的要求,我们实现了以下辅助函数:-
function defaultLookup (entity, destinationPropertyName, sourceCollectionName, options) {
/// <summary>
/// Defaults an entity's lookup property
/// </summary>
/// <param name="entity" type="Object">The entity featuring the lookup property to default</param>
/// <param name="destinationPropertyName" type="String">The lookup property against the entity to default</param>
/// <param name="sourceCollectionName" type="String">The collection from which to source the lookup value</param>
/// <param name="options" type="PlainObject" optional="true">
/// A set of key/value pairs used to select additional configuration options. All options are optional.
/// <br/>- String filter: If supplied, defines the match condition for the required default, otherwise the lookup defaults to the first entry in the source collection
/// </param>
options = options || {}; // Force options to be an object
var source = myapp.activeDataWorkspace.ApplicationData[sourceCollectionName]; // DataServiceQuery
var query = {}; //DataServiceQuery
if (options.filter) {
query = source.filter(options.filter);
} else {
query = source.top(1);
}
query.execute().then(function (result) {
entity[destinationPropertyName] = result.results[0];
});
};
在您的情况下,您需要更改 ApplicationData 以读取 ProjectData。
这可以在您的屏幕创建事件中调用,如下所示:-
myapp.AddEditCustomer.created = function (screen) {
var defaultValue = "Chris Cook";
var filter = "(Name eq " + msls._toODataString(defaultValue, ":String") + ")";
defaultLookup(screen.Customer, "Contact", "Contacts", { filter: filter });
};
在你的情况下,screen.Customer应该改为screen.OrderRequest,"Contact"应该改为"CustomerName","Contacts"应该改为 "ShippingContacts"。此外,根据您的查找 table 有一个名为 ContactName 的字段,过滤器字符串需要引用 ContactName 而不仅仅是姓名。
或者,可以从您的实体创建的事件(在您的 UserCode 脚本部分)中调用此助手,如下所示:-
myapp.Customer.created = function (entity) {
var defaultValue = "Chris Cook";
var filter = "(Name eq " + msls._toODataString(defaultValue, ":String") + ")";
defaultLookup(entity, "Contact", "Contacts", { filter: filter });
};
在我的代码示例中,主 table 称为 "Customers",查找 table 称为 "Contacts"。主 table 中的 "Contact" 字段引用了联系人 table 中的一个条目。联系人 table 有一个名为 "Name" 的字段和一个名称设置为值 "Chris Cook" 的记录(默认值和过滤器变量指的是这种情况)。
下图显示了正在调试的screen.Customer属性:-
我现在对此进行了大量研究,但没有一个示例有帮助或适用。我想要做的是当用户加载添加屏幕时,我希望详细信息选择器在创建屏幕时显示一个名称,而不是每次都必须 select 它。我相信这可以做到,但我的 javascript 技能不足。
感谢您的帮助, 下面是一个例子:
此名称存储在 table 中,可以在此模态 picker/details 选择器中搜索,但您可以想象,如果 50% 的时间需要此值,则手动添加它不仅费时而且会变得有点乏味
在每个项目上按 post render
后,可以使用 contentItem.value
或 element.innerText
来操作文本框,但这不适用于这种类型的控件,我看到了出现以下错误:
这里有一些有用的信息,可能会有所帮助:
- ProjectData(数据源)
- 主屏幕引用 OrderRequest
- 外键 link 引用 ShippingContact 并在 DetailsPicker 上搜索 CustomerName
根据下面的回答,我是否需要替换任何东西到 top 函数,然后在代码的第二部分,你写的地方 defaultLookup(screen.Customer, "Contact", "Contacts",
这里需要做什么?
我试图改变的例子,不幸的是这不起作用
var defaultValue = "Test User";
var filter = "(ContactName eq " + msls._toODataString(defaultValue, ":String") + ")";
defaultLookup(screen.OrderRequest, "ContactName", "ShippingContacts", { filter: filter });
有相同的要求,我们实现了以下辅助函数:-
function defaultLookup (entity, destinationPropertyName, sourceCollectionName, options) {
/// <summary>
/// Defaults an entity's lookup property
/// </summary>
/// <param name="entity" type="Object">The entity featuring the lookup property to default</param>
/// <param name="destinationPropertyName" type="String">The lookup property against the entity to default</param>
/// <param name="sourceCollectionName" type="String">The collection from which to source the lookup value</param>
/// <param name="options" type="PlainObject" optional="true">
/// A set of key/value pairs used to select additional configuration options. All options are optional.
/// <br/>- String filter: If supplied, defines the match condition for the required default, otherwise the lookup defaults to the first entry in the source collection
/// </param>
options = options || {}; // Force options to be an object
var source = myapp.activeDataWorkspace.ApplicationData[sourceCollectionName]; // DataServiceQuery
var query = {}; //DataServiceQuery
if (options.filter) {
query = source.filter(options.filter);
} else {
query = source.top(1);
}
query.execute().then(function (result) {
entity[destinationPropertyName] = result.results[0];
});
};
在您的情况下,您需要更改 ApplicationData 以读取 ProjectData。
这可以在您的屏幕创建事件中调用,如下所示:-
myapp.AddEditCustomer.created = function (screen) {
var defaultValue = "Chris Cook";
var filter = "(Name eq " + msls._toODataString(defaultValue, ":String") + ")";
defaultLookup(screen.Customer, "Contact", "Contacts", { filter: filter });
};
在你的情况下,screen.Customer应该改为screen.OrderRequest,"Contact"应该改为"CustomerName","Contacts"应该改为 "ShippingContacts"。此外,根据您的查找 table 有一个名为 ContactName 的字段,过滤器字符串需要引用 ContactName 而不仅仅是姓名。
或者,可以从您的实体创建的事件(在您的 UserCode 脚本部分)中调用此助手,如下所示:-
myapp.Customer.created = function (entity) {
var defaultValue = "Chris Cook";
var filter = "(Name eq " + msls._toODataString(defaultValue, ":String") + ")";
defaultLookup(entity, "Contact", "Contacts", { filter: filter });
};
在我的代码示例中,主 table 称为 "Customers",查找 table 称为 "Contacts"。主 table 中的 "Contact" 字段引用了联系人 table 中的一个条目。联系人 table 有一个名为 "Name" 的字段和一个名称设置为值 "Chris Cook" 的记录(默认值和过滤器变量指的是这种情况)。
下图显示了正在调试的screen.Customer属性:-