Lightswitch HTML 客户端 - 在创建屏幕时设置模式选择器值

Lightswitch HTML Client - set modal picker value when screen created

我现在对此进行了大量研究,但没有一个示例有帮助或适用。我想要做的是当用户加载添加屏幕时,我希望详细信息选择器在创建屏幕时显示一个名称,而不是每次都必须 select 它。我相信这可以做到,但我的 javascript 技能不足。

感谢您的帮助, 下面是一个例子:

此名称存储在 table 中,可以在此模态 picker/details 选择器中搜索,但您可以想象,如果 50% 的时间需要此值,则手动添加它不仅费时而且会变得有点乏味

在每个项目上按 post render 后,可以使用 contentItem.valueelement.innerText 来操作文本框,但这不适用于这种类型的控件,我看到了出现以下错误:

这里有一些有用的信息,可能会有所帮助:

根据下面的回答,我是否需要替换任何东西到 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属性:-