当今的挑战:修复程序

2020-08-20 04:17发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)你好朋友 我只是想挑战一天,以...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好朋友

我只是想挑战一天,以模仿HANA中的小型登录功能。

我偶然发现了时间限制以及其他问题或错误(从句法上讲,您可以根据需要改进逻辑)

过程" LoginValidate"(在IM_GID nvarchar(6)中,在IM_PASSWD nvarchar(96)中,在EX_StatusIndicator nvarchar(3)中,在Ex_Status nvarchar(216)中)
    语言SQLSCRIPT
    SQL安全调用程序
    --DEFAULT SCHEMA <默认模式名称>
   -读取SQL数据
   如
 开始
  /*****************************************
        编写过程逻辑
    ******************************************/
    声明LV_UserExistCount字符串;
    声明LV_UserExistPass字符串;
    声明LV_Attempt Integer;
    从" Datasource.MD_USER_DETAIL"中选择DISTINCT(USERID)到LV_UserExistCount,其中USERID =:IM_GID;
    if(长度(:LV_UserExistCount))= 0
    然后
 EX_StatusIndicator ='X1';
 Ex_Status ='您尚未注册,请先注册';
 其他
 if(Length(:LV_UserExistCount))= 1
         然后
         从" Datasource.MD_USER_DETAIL"中选择DISTINCT(" Password")放入LV_UserExistPass,其中" Password" =:IM_PASSWD;
         if(长度(:LV_UserExistPass))= 0
         然后
         EX_StatusIndicator ='X2';
 Ex_Status ='您未被授权,密码错误';
 从" Datasource.DailyLoginControl"中选择" NoOfAttempt"进入LV_Attempt;
 如果(LV_Attempt为null)
 LV_Attempt = 0;
 万一;
 如果(to_Integer(LV_Attempt)> = 3)然后
 EX_StatusIndicator ='X3';
 Ex_Status ='违反! 您的帐户已被锁定';
 否则(to_Integer(LV_Attempt)<= 3)然后
 从" Datasource.DailyLoginControl"中选择" NoOfAttempt"进入LV_Attempt;
 EX_StatusIndicator ='X4';
 Ex_Status ='未授权! 您的帐户输入了错误的密码" + LV_Attempt +"时间";
 LV_Attempt = LV_Attempt + 1;
 更新" Datasource.DailyLoginControl"设置为" GID" = IM_GID,"状态" ="失败"," LoggedInat" = current_date,NoOfAttempt = LV_Attempt,ResetRequestDate ='00000000',其中" GID" = IM_GID," LoggedInat" = current_date
 承诺;

 其他
 EX_StatusIndicator ='200';
 Ex_Status ='授权! 登录成功';

 更新" Datasource.DailyLoginControl"设置为" GID" = IM_GID,"状态" ="成功"," LoggedInat" = current_date,NoOfAttempt = 0,ResetRequestDate =" 00000000",其中" GID" = IM_GID," LoggedInat" = current_date;
 承诺;

 万一;
             万一;
         万一;
    万一;
   
 结束


 

错误如下

 11:56:23 AM(HDB)位于" src/Procedure/Authorization/LoginValidate.hdbprocedure"(55:1)错误:预编译...失败[8212133]错误:计算依赖项...失败[8212108] 制作失败(5个错误,0个警告):尝试部署1个文件,取消部署0个文件,重新部署0个从属文件错误:制作...失败[8211605] 

进一步参考以重新创建场景。

上下文数据源{

 实体" MD_USER_DETAIL"
 {
  键" USERID":字符串(12);
 };


 实体DailyLoginControl
 {
 键" GID":字符串(12);
 状态:字符串(13);
 LoggedInat:UTCTimestamp;
 NoOfAttempt:Integer;
 ResetRequestDate:UTCTimestamp;

 };

 }


 

让我们解决这个问题,并帮助我们的社区以较小的#Learnings体验。

我还将修复和工作代码的结果发布在同一页面中,并将其添加到GITHUB。

Br,

Asgariel。

3条回答
huskylover
2020-08-20 04:33

不确定这是否是根本原因,但是将密码存储在数据库中肯定是错误的,并且应该编译失败。

另一件事是,对不存在的用户的检查不仅繁琐(长度 计数吗?),但如果没有匹配的用户,也不会达到该计数。 相反,如果找不到值,则select into会引发错误。

据我所知,这是我阅读的一些随机代码,没有规范,测试数据或表定义。

这不是"样本","运动","测验"或您要称呼的任何东西。 只是您的代码不起作用。
显然,寻求帮助是正确的事情,但是如果您尝试将其作为对我与Florian在一起的社区的"学习"来出售,并且感到领先(而且很便宜)。

有了 对此,我肯定会感谢您指出了代码中的两个主要问题,并希望您在以后的实现中一切顺利。

一周热门 更多>