现代命令的范围

命令具有三个范围中的一个。 范围确定命令 (schemaname = appaction) 是为单个应用内的表、跨所有应用的表还是为所有表和所有应用呈现。

无论范围如何,命令都必须绑定到命令栏位置,如主网格或主窗体。 因此,更改范围不会在不同的命令栏位置(如主网格和主窗体)呈现命令。

  • 应用这是使用现代命令设计器创建或编辑命令时最窄的范围和默认行为。 命令设计器在模型驱动应用、表和命令栏位置的上下文中打开。
  • 也称为实体范围。 绑定到特定表和命令栏位置。 不绑定到任何特定应用。 因此,表范围的命令将在所有使用该表的应用中呈现。 例如,在查看客户记录的主窗体时,所有应用中都会出现客户表和主窗体位置的表范围命令。
  • 全局这是最广泛的范围。 全局范围命令仅绑定到命令栏位置,不绑定到应用或表。 例如,当查看每个表的主窗体时,主窗体位置的全局范围命令存在于环境中的所有应用中。

重要提示

目前无法为操作和/或可见性将使用 Power Fx 的命令转换为表或全局范围。

当命令嵌套在下拉列表、组和拆分按钮中时,所有命令都必须设置为相同的范围。

如果在现代命令设计器中编辑全局或表范围命令,将使用应用范围创建副本(实例)并将其链接到原始命令。 例如,在命令设计器中编辑全局范围命令会替代原始全局范围命令,但仅限于打开命令设计器时选择的特定应用和表。 所有其他应用和表都将呈现原始命令。 副本(实例)现在具有自己的生命周期。 对原始全局范围命令的更改不会影响新的应用范围实例,反之亦然。

替代表和全局范围命令

更窄的范围可以在每个级别替代更广泛的范围命令。 最窄的范围获胜。

  • 表(实体)范围命令会替代全局范围命令。 您可以定义一个在所有表中都相同的命令,但只修改特定表的行为。
  • 应用范围命令会替代所有其他范围,但仅限于特定的应用和表。

如何创建表范围命令

  1. 使用命令设计器在您的解决方案中创建一个或多个命令。 或者,创建一个单独的解决方案,然后选择添加现有>

  2. 选择选择对象,然后添加所需命令。

  3. 选择导出导出解决方案。

    导出解决方案。

  4. 如果您最近进行了尚未发布的更改,选择发布。 然后,选择运行检查解决方案是否有任何问题或依赖关系,然后选择下一步

  5. 选择非托管选项,然后选择导出

  6. 下载对话框中,选择保存,然后在下载完成对话框中,选择打开文件夹

  7. 右键单击选择下载的压缩 .zip 文件,然后选择全部解压缩

  8. 选择一个位置来解压缩文件,然后选择解压缩

  9. 打开文件夹,找到解压的文件,打开 appaction.xml 文件,找到所需的命令 (appaction)。

  10. 从 xml 中删除 appmoduleid 节点。

     <appmoduleid>
       <uniquename>demo_DemoFestApp</uniquename>
     </appmoduleid>
    
  11. 更改 appaction uniquename 的值。 更改最后一个字符中的任何一个即可,如从 1 改为 2,或者如果需要,可以使用更多描述性的命名约定。

示例 XML。

   <appaction uniquename="crdff_NewCommand!a078463b5d7c473d8965f0f80469f412!crdff_CustomApp!crdff_entity1!1">
  <buttonlabeltext default="Show Alert">
    <label description="Show Alert" languagecode="1033" />
   </buttonlabeltext>
   <buttonsequencepriority>10.0000000000</buttonsequencepriority>
   <context>1</context>
   <contextentity>
    <logicalname>crdff_entity1</logicalname>
   </contextentity>
   <fonticon>AALinkedInLogo</fonticon>
   <contextvalue>crdff_entity1</contextvalue>
   <hidden>0</hidden>
   <iscustomizable>1</iscustomizable>
   <location>1</location>
   <name>EntityScoped!a078463b5d7c473d8965f0f80469f412</name>
   <onclickeventjavascriptfunctionname>ShowAppAlert</onclickeventjavascriptfunctionname>
   <onclickeventjavascriptparameters>[]</onclickeventjavascriptparameters>
   <onclickeventjavascriptwebresourceid>
    <webresourceid>ac21ad24-3c11-ef11-b6u7-000d3a1d942c</webresourceid>
   </onclickeventjavascriptwebresourceid>
   <onclickeventtype>2</onclickeventtype>
   <statecode>0</statecode>
   <statuscode>1</statuscode>
   <type>0</type>
   </appaction>

编辑并保存 appaction.xml 文件后,以与导出时相同的格式压缩您的解决方案。 然后将解决方案导入回您的环境并测试行为。

如何创建全局范围命令

  1. 按照上述相同步骤编辑 appaction.xml 文件。

  2. 删除 xml 中的 appmoduleid 节点:

     <appmoduleid>
       <uniquename>demo_DemoFestApp</uniquename>
     </appmoduleid>
    
  3. 更改 appaction uniquename 的值。 更改最后一个字符中的任何一个即可,如从 1 改为 2,或者如果需要,可以使用更多描述性的命名约定。

  4. 删除 xml 中的 contextentitycontextvalue 节点:

    <contextentity>
     <logicalname>account</logicalname>
    </contextentity>
    <contextvalue>account</contextvalue>
    
  5. context 值从 1 改为 0。

    <appaction uniquename="crdff_NewCommand1!8fe72a85-1f84-431e-ac56-854f1bfadc4e!1">
    <buttonlabeltext default="Show Alert">
    <label description="Show Alert" languagecode="1033" />
    </buttonlabeltext>
    <buttonsequencepriority>10.0000000000</buttonsequencepriority>
    <context>0</context>
    <hidden>0</hidden>
    <iscustomizable>1</iscustomizable>
    <fonticon>AALinkedInLogo</fonticon>
    <location>1</location>
    <name>EntityScoped!a078463b5d7c473d8965f0f80469f412</name>
    <onclickeventjavascriptfunctionname>ShowGlobalAlert</onclickeventjavascriptfunctionname>
    <onclickeventjavascriptparameters>[]</onclickeventjavascriptparameters>
    <onclickeventjavascriptwebresourceid>
     <webresourceid>ac21ad24-3c01-ec11-b6e7-000d3a1d942c</webresourceid>
    </onclickeventjavascriptwebresourceid>
    <onclickeventtype>2</onclickeventtype>
    <statecode>0</statecode>
    <statuscode>1</statuscode>
    <type>0</type>
    </appaction>
    

编辑并保存 appaction.xml 文件后,以与导出时相同的格式压缩您的解决方案。 然后将解决方案导入回您的环境并测试行为。

如何使用表范围替代全局范围命令

此示例适用于当您希望全局范围命令除了对于特定表在所有位置都相同的情况。

  • 实体范围操作将在所有应用的 crdff_entity1 网格上可见,除了 crdff_CustomApp
  • 全局范围操作将在除 crdff_entity1 之外的所有实体网格上可见。

备注

要使用应用范围命令替代全局或表范围命令,只需使用命令设计器编辑命令。

要使用表范围命令替代全局范围命令,修改 appactions.xml 文件,让这些文件具有相同的 XML <name>

替代步骤

  1. 按照如何创建全局范围命令中的步骤操作,但使用命令设计器创建两个命令。

  2. 如步骤中所述,导出您的解决方案,编辑 appactions.xml 文件。

  3. 继续按照步骤创建一个全局和一个实体范围命令。

  4. name 属性设置为对全局和实体范围命令完全相同。

全局范围命令 XML 示例

<appaction uniquename="crdff_NewCommand1!8fe72a85-1f84-431e-ac56-854f1bfadc4e!1">
<buttonlabeltext default="Show Alert">
 <label description="Show Alert" languagecode="1033" />
</buttonlabeltext>
<buttonsequencepriority>10.0000000000</buttonsequencepriority>
<context>0</context>
<hidden>0</hidden>
<iscustomizable>1</iscustomizable>
<fonticon>AALinkedInLogo</fonticon>
<location>1</location>
<name>EntityScoped!a078463b5d7c473d8965f0f80469f412</name>
<onclickeventjavascriptfunctionname>ShowGlobalAlert</onclickeventjavascriptfunctionname>
<onclickeventjavascriptparameters>[]</onclickeventjavascriptparameters>
<onclickeventjavascriptwebresourceid>
 <webresourceid>ac21ad24-3c01-ec11-b6e7-000d3a1d942c</webresourceid>
</onclickeventjavascriptwebresourceid>
<onclickeventtype>2</onclickeventtype>
<statecode>0</statecode>
<statuscode>1</statuscode>
<type>0</type>
</appaction>

表范围命令 XML 示例

<appaction uniquename="crdff_NewCommand!a078463b5d7c473d8965f0f80469f412!crdff_entity1!1">
<buttonlabeltext default="Show Alert">
<label description="Show Alert" languagecode="1033" />
</buttonlabeltext>
<buttonsequencepriority>10.0000000000</buttonsequencepriority>
<context>1</context>
<contextentity>
<logicalname>crdff_entity1</logicalname>
</contextentity>
<fonticon>AALinkedInLogo</fonticon>
<contextvalue>crdff_entity1</contextvalue>
<hidden>0</hidden>
<iscustomizable>1</iscustomizable>
<location>1</location>
<name>EntityScoped!a078463b5d7c473d8965f0f80469f412</name>
<onclickeventjavascriptfunctionname>ShowEntityAlert</onclickeventjavascriptfunctionname>
<onclickeventjavascriptparameters>[]</onclickeventjavascriptparameters>
<onclickeventjavascriptwebresourceid>
<webresourceid>ac21ad24-3c01-ec11-b6e7-000d3a1d942c</webresourceid>
</onclickeventjavascriptwebresourceid>
<onclickeventtype>2</onclickeventtype>
<statecode>0</statecode>
<statuscode>1</statuscode>
<type>0</type>
</appaction>