访问变量在共同的项目LightSwitch中设置从服务器项目(Access Variables se

2019-10-19 05:26发布

所以我重做一些代码前面的问题的,但是相同的基本问题仍然存在。 我所试图做的是这样的:当我的LightSwitch应用程序启动通过Application.cs我使用的方法Application_LoggedIn()调用我的共同的项目一个函数来获取所有用户访问(此数据存储在位置一张桌子)。

客户项目 - Application.cs

  partial void Application_LoggedIn()
    {
        Secure.Membership aa = new Membership();
        aa.membership();
    }

共同的项目 - 在调用该方法后,我再运行我的查询中的成员()函数来获取所有用户有权访问的位置。 它们被存储在三个表:estateList,deptList,GROUPLIST;

public void membership() {

    List<int> estateList = new List<int>();
    List<int> deptList = new List<int>();
    List<int> groupList = new List<int>();

    var dws = Application.Current.CreateDataWorkspace().sspData;
    String uName = Application.Current.User.Identity.Name;
    try
    {
        var qryUser = (from a in dws.aspnet_Users
                       where a.UserName == uName
                       select a).Execute().Single();

        int membershipId = qryUser.Payroll_MembershipGroup.Id;
        var qryOrgMember = (from a in dws.PayrollOrg_MembershipGroups
                            where a.Payroll_MembershipGroup.Id == membershipId
                            select a).Execute().ToList();

        foreach (var x in qryOrgMember)
        {

            if (!estateList.Contains(x.Payroll_Organisation.Estate1.ID))
            {
                estateList.Add(x.Payroll_Organisation.Estate1.ID);
            }
            if (!deptList.Contains(x.Payroll_Organisation.Estate1.ID))
            {
                deptList.Add(x.Payroll_Organisation.Department1.ID);
            }
            if (!groupList.Contains(x.Payroll_Organisation.Estate1.ID))
            {
                groupList.Add(x.Payroll_Organisation.Payroll_Group1.ID);
            }
        }
    }
    catch (Exception e)
    {

        Debug.WriteLine("***************" + e.InnerException);
    }

}

我想这样做之后能够从我的服务器项目中访问3所列出(房地产,部门,组),所以我可以使用列表,如下图所示我的实体进行过滤。

partial void Employee_Employs_Filter(ref Expression<Func<Employee_Employ, bool>> filter)
{ 
   filter = e => estateList.Contains(e.Estate1.ID) && deptList.Contains(e.Substantive_Department) && groupList.Contains(e.Payroll_Group1.ID);
}

这就是我想做的事情,我有问题。 任何建议将受到欢迎。 我试图做的是在我的共同的项目创建一个静态类和但设置的值作为一个用户正确地指出,我不能这样做,因为这将是空当我试图从我的服务器项目中调用它。 请帮我在这里,这是我与这个应用程序有一个大问题,并且是唯一的剩余部分。 提前致谢。

在服务器端 * @Duran这个** * ** * ** * *** 过滤代码是什么我有在服务器端。

public List<User> membership() {

    List<User> aList = new List<User>();
    User aUser = new aUser();


    var dws = Application.Current.CreateDataWorkspace().sspData;
    String uName = Application.Current.User.Identity.Name;
    try
    {
        var qryUser = (from a in dws.aspnet_Users
                       where a.UserName == uName
                       select a).Execute().Single();

        int membershipId = qryUser.Payroll_MembershipGroup.Id;
        var qryOrgMember = (from a in dws.PayrollOrg_MembershipGroups
                            where a.Payroll_MembershipGroup.Id == membershipId
                            select a).Execute().ToList();

        foreach (var x in qryOrgMember)
        {

            aUser.estateId = x.estateId
            auser.deptId = x.deptId;
            aUser.groupId = x.groupId;

            aList.add(aUser);
        }
    }
    catch (Exception e)
    {

        Debug.WriteLine("***************" + e.InnerException);
    }

    return aList;

}

public class User{

    public estateId{set;get:}
    public deptId{set;get:}
    public groupId{set;get:}

}

Now in my filter i would call the method membership() that returns a list<User>

partial void Employee_Employs_Filter(ref Expression<Func<Employee_Employ, bool>> filter)
{ 
    var x = membership();
    estId[int] = new [x.count()];
    deptId[int] = new [x.count()];
    groupId[int] = new [x.count()];

    for (int i=0; i<x.count();i++){
         estId[i] = x.elementAt(i).estateId;
         deptId[i] = x.elementAt(i).deptId;
         groupId[i] = x.elementAt(i).groupId;

    }

   filter = e => estId.Contains(e.Estate1.ID) && deptId.Contains(e.Substantive_Department) && groupId.Contains(e.Payroll_Group1.ID);
}

我必须把类似于上面的一个对我的所有表过滤器,这就是当我得到的计算器错误。 当它是所有表它的工作原理,当它在一个表上唯独不见。 我究竟做错了什么?

Answer 1:

即使在公共项目中的代码是在客户端服务器项目之间“共享”,任何变量,创建有有自己独立的情况下,一个在客户端项目,和一个在服务器项目。

所以,你没有真正访问一个单一的共享变量在所有的,这就是为什么当你在一层设置的值,对其他层的价值不能反映值的改变,因为他们实际上是两个的不同实例该变量。



文章来源: Access Variables set in Common Project From Server Project in Lightswitch