Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检索Acumatica中任何公司的相关数据_Acumatica - Fatal编程技术网

如何检索Acumatica中任何公司的相关数据

如何检索Acumatica中任何公司的相关数据,acumatica,Acumatica,我在PreferencesGeneral中添加了一个名为UsrShortCompanyName的自定义字段。我需要一个静态方法,它应该返回一个Dictionary,其中Key==CompanyKey.CompanyKey和Value==PreferencesGeneral.UsrShortCompanyName。 因此,我需要Acumatica的ORM来执行sql查询,该查询应该如下所示: select c.CompanyKey, p.UsrCompanyShortName from Compa

我在PreferencesGeneral中添加了一个名为UsrShortCompanyName的自定义字段。我需要一个静态方法,它应该返回一个Dictionary,其中Key==CompanyKey.CompanyKey和Value==PreferencesGeneral.UsrShortCompanyName。 因此,我需要Acumatica的ORM来执行sql查询,该查询应该如下所示:

select c.CompanyKey, p.UsrCompanyShortName from Company c inner join PreferencesGeneral p on p.CompanyID = c.CompanyID where c.CompanyType != 'System'
我有几个问题:

  • PXSelect在当前公司范围内执行查询,以便 自动添加条件“WHERE CompanyID=”。 是否可以阻止ORM添加此公司限制

  • 首选项General和公司DAC均不包含公司ID 字段,所以我不能写这样的东西

  • PXSelectJoin

    在这种情况下我该怎么办

  • 是否有可能使用 针灸的ORM?我发现的唯一类似的功能是 执行方法,但它只能用于存储 过程,并且仅当SP具有输出参数时才会返回数据。 但在我的例子中,它不是一个选项,因为输出参数不能是 表类型
  • 我发现的唯一解决方法是在新的SqlConnection范围内执行sql查询,但在本例中,我需要获得与Acumatica的ORM相同的连接字符串。我想知道Acumatica是如何决定是否应该在Web.config(如果是本地或QA服务器)或Azure配置(用于生产)中搜索连接字符串的


    感谢您的帮助。

    BQL严格执行公司隔离,除非您登录到该公司,否则您将无法从其他公司检索数据。如果其他公司的数据被拆分/共享,ORM还负责从其他公司ID返回数据。正如您所注意到的,对于不包含CompanyID字段的表,系统将返回该表中包含的所有数据

    除非经过存储过程,否则不允许运行直接SQL查询,并且除非修改默认安全策略(SqlClientPermission in web_project_x.config),否则将无法打开SqlConnection。允许直接SQL查询可能会使应用程序易受SQL注入攻击,也会使其他公司的数据“可渗透”——尽管大多数安装为每个注册客户使用单独的数据库,但Acumatica也可用于完全多租户环境,我们需要确保租户(客户)之间有适当的隔离

    如果您正在开发针对多个Acumatica客户的ISV解决方案,我强烈建议您避免使用绕过ORM的技术。这样的解决方案不会被ACMUICA认证,我认为它们只适用于一次性定制。相反,您可以使用以下方法之一获取数据:

    • 创建一个没有CompanyID的特殊表,该表将存储所有公司可用的数据
    • 使用web服务连接到其他公司
    • 使用PXLoginScope块以另一家公司的另一个用户的身份临时运行代码
    • 创建绑定到同名BQL表的SQL视图
    • 调用一个SQL存储过程,该过程聚合来自多个公司的数据(并在结果视图中省略CompanyID字段)

    坚持使用BQL的另一个理由是,您的代码将在MySQL和SQL Server上透明地工作。如果您依赖SQL视图或存储过程,则必须创建不同的版本以支持这两种平台。

    谢谢您的帮助。虽然SQL注入在我的例子中不是问题,但我意识到我的解决方案的所有缺点。我几乎想到了你提供的每一种选择,但由于不同的原因,它们不适合我。我没有尝试/想到的唯一选项是SQL视图。我现在就试试看。还有一个问题:是否可以使用BQL调用SQL表值函数并将函数的结果赋给变量?再次感谢您的帮助。我从未见过调用表值函数的示例。你到底想达到什么目的?在Company表中有一个CompanyKey列。我已将UrsCompanyShortName添加到PreferencesGeneral表中。我需要一种方法来获取一个字典,其中CompanyKey是key,而companyshortname是value。因此,该数据可以表示为一个包含两列的表(可以通过sql视图或sql函数完成)。对于视图,我需要一个额外的DAC,以便能够从视图中检索数据;对于函数,我可以调用它并将其返回值赋给某个IEnumerable变量。在某些情况下,函数可能比视图更方便,但视图也可以