Lightswitch HTML Client - 在创建屏幕时设置模态选择器值

时间:2015-02-16 11:36:16

标签: javascript visual-studio-lightswitch lightswitch-2013

我已经对此进行了相当多的研究,并且没有示例有用或适用。我想要做的是当用户加载添加屏幕时,我希望细节选择器在创建屏幕时显示名称,而不是每次都必须选择它。我确定这可以做到,但我的javascript技能缺乏。

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

enter image description here

这个名称存储在一个表中,可以在这个模态选择器/详细信息选择器中搜索,但是你可以想象,如果50%的时间需要这个值,那么手动添加它不仅耗费时间而且会变成有点单调乏味

在每个项目上按contentItem.value后,可以使用element.innerTextpost render操作文本框,但这不适用于此类控件,我会看到低于错误: enter image description here

提供一些可能有用的有用信息:

  • ProjectData (数据源)
  • 主屏幕参考 OrderRequest
  • 在DetailsPicker上搜索外键链接引用 ShippingContact 和CustomerName

基于以下答案我是否需要在顶部函数中替换任何内容,然后根据代码的第二部分编写,在哪里编写defaultLookup(screen.Customer, "Contact", "Contacts",需要去哪里?

我试图改变的例子,不幸的是这不起作用

var defaultValue = "Test User";
    var filter = "(ContactName eq " + msls._toODataString(defaultValue, ":String") + ")";
    defaultLookup(screen.OrderRequest, "ContactName", "ShippingContacts", { filter: filter });

1 个答案:

答案 0 :(得分:2)

有了相同的要求后,我们实施了以下帮助功能: -

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,&#34; Contact&#34;应更改为&#34;客户名称&#34;和&#34;联系人&#34;应更改为&#34; ShippingContacts&#34;。此外,根据您的查询表有一个名为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 });
};

在我的代码示例中,主表名为&#34; Customers&#34;并且查询表被称为&#34;联系人&#34;。 &#34;联系&#34;主表中的字段引用Contacts表中的条目。 Contacts表有一个名为&#34; Name&#34;的字段。以及名称设置为&#34; Chris Cook&#34;的记录。 (defaultValue和filter变量引用这种情况。)

下图显示了正在调试的screen.Customer属性: -

enter image description here