回复:winccOA的画面操作权限实时更新方法探讨

已锁定

锋言锋语

西门子1847工业学习平台

  • 帖子

    3943
  • 精华

    54
  • 被关注

    130

论坛等级:至圣

注册时间:2011-07-31

钻石 钻石 如何晋级?

发布于 2021-08-08 11:13:14

1楼

main()

{

 string dp;  

    dp = myUiDpName() + ".";  //注册当前用户变化的回调函数

   dpConnect("SetPermission",dp+"UserName:_online.._value");  

    DebugN("myUiDpName", dp);

}


void SetPermission(string dp , string username)

{

   string name = getUserName(); //获取用户名

  mapping mp = getUserDataByNamePVSS(name); //获取组别

  string gps = mp["GroupIds"];

  dyn_string dps = strsplit(gps, ";"); //组别数组,多组用;隔开

  bool flag  = false;

  int levelID;


  dpGet("System1:Test.P1:_online.._value", levelID);//获取控件关联的 授权Level信息,自定义变量;

    dyn_errClass err = getLastError();

  if (dynlen(err) > 0)

  { 

    errorDialog(err);

    return;

  }


  for(int i = 1; i <= dynlen(dps); ++i)

  {

    int id;

    sscanf(dps[i], "%d", id); //字符串转整型

     mapping  np = getGroupDataPVSS(dps[i]);  //根据GroupID获取组的信息

   string PerSet = np["PERMSET"];//组的授权信息,32为"01"字符串,

  

    string s = substr(PerSet, 32 - levelID, 1);  //授权信息是逆序转换,获取对应的level

    bool t = s == "1";  //匹配Level


    flag = flag || t; 


    if(flag)  //遇到匹配的退出

      break;

  }

    

   this.enabled = flag;

 }

//测试了一下, 这个就是我的思路。  Test.P1就是一个设置授权等级的地方;

不忘初心
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC OA (原PVSS)

共有379条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。