技术论坛

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

作者 主题
至圣

经验值: 23742
发帖数: 3385
精华帖: 52
主题:【探讨】winccOA的画面操作权限实时更新方法探讨


只看楼主 楼主 2021-08-08 07:52:21

winccOA的画面操作权限, 一般是坐在Initialize脚本中,但是这个方法有个弊病, 就是在线切换用户, 画面控件的enabled不变;  或者坐在控件的click事件中, 但是只能点击哪个,更新哪个。


我的思路是, 在全局脚本中生成当前用户的授权状态,做成一个双字dp。一组相关的画面控件, 可以关联一个授权dp值。 在Initialize实践中, 将当前用户授权状态双字dp通过dpConnect注册到回调函数, 状态双字dp变化就调用回调函数;在回调函数中, 比较当前授权状态和控件关联的授权dp值, 对enabled进行更新。


然后将控件做成Object, 授权dp坐车参数$name. 这样就不用操心授权更新的问题了。

否则,我感觉每个单独处理,确实很繁琐。


这个当前用户的授权状态, 用全局脚本获取, 或者可能有个内部变量, 这个我不太清楚。 我只是提出一个我的思路。这个思路,我分析是当前主流HMI的通用做法, 只是隐藏了实现细节。


顺便吐槽一下,winccOA是有一种开放式的, 搞IT开发的感觉。   但是, 又有一种得自己造轮子的窘迫。 也许, 随着应用的增多, 各种用户自定义库, 自定义object的增多, 会越来越好用。就像c#那样。


不忘初心
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1709080&b_id=65&s_id=0&num=6

至圣

经验值: 23742
发帖数: 3385
精华帖: 52
回复:winccOA的画面操作权限实时更新方法探讨


只看楼主 楼主 1楼 2021-08-08 11:13:14

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就是一个设置授权等级的地方;


不忘初心
以下网友喜欢您的帖子:

  
至圣

经验值: 23742
发帖数: 3385
精华帖: 52
回复:winccOA的画面操作权限实时更新方法探讨


只看楼主 楼主 2楼 2021-08-11 14:04:27

这个方法,只适合没有定义area和 workstation授权的情况。


另外, 为什么论坛里OA这么冷清?   现在不是在主推吗?  这么冷清, 搞得我心里直打鼓, 到底有没有必要深入学习。


不忘初心
以下网友喜欢您的帖子:

  
新手

经验值: 30
发帖数: 2
精华帖: 0
回复:winccOA的画面操作权限实时更新方法探讨


只看楼主 3楼 2021-09-07 20:51:32

问个小白问题,winccoa,panel被加密了,是怎么打开的,双击提示加密,并没有输入密码的地方


 
以下网友喜欢您的帖子:

  
游民

经验值: 53
发帖数: 3
精华帖: 0
回复:winccOA的画面操作权限实时更新方法探讨


只看楼主 4楼 2021-11-10 15:04:47

学习了,将来用的时候参考参考


 
以下网友喜欢您的帖子:

  
hf1
奇侠

经验值: 8177
发帖数: 1454
精华帖: 3
回复:winccOA的画面操作权限实时更新方法探讨


只看楼主 5楼 2021-11-12 15:06:45

讲得很详细,谢谢分享!


 
以下网友喜欢您的帖子:

  
游民

经验值: 68
发帖数: 11
精华帖: 0
回复:winccOA的画面操作权限实时更新方法探讨


只看楼主 6楼 2021-11-26 10:21:54

好好学习,天天向上


 
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
winccOA的画面操作权限实时更新方法探讨
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。