当今的挑战:修复程序

2020-08-20 04:17发布

         点击此处--->   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。

         点击此处--->   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
1楼-- · 2020-08-20 04:33

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

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

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

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

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

SAP浪
2楼-- · 2020-08-20 04:55

这听起来不像是"挑战",

如果您想为自己的问题提供答案,请提出一个适当的问题,并添加仅摘要的完整错误日志记录。

spaceman01
3楼-- · 2020-08-20 04:57
过程" LoginValidate"(在IM_GID nvarchar(6)中,在IM_PASSWD nvarchar(96)中,在EX_StatusIndicator nvarchar(5)中,在Ex_Status nvarchar(216)中)
    语言SQLSCRIPT
    SQL安全调用程序
    --DEFAULT SCHEMA <默认模式名称>
   -读取SQL数据
   如
 开始
  /*****************************************
        编写过程逻辑
    ******************************************/
    声明LV_UserExistCount整数;
    声明LV_UserExistPass整数;
    声明LV_Attempt Integer;
 IF(IM_GID =''或IM_PASSWD = null)然后EX_StatusIndicator ='X0';  Ex_Status ='不能为空'; 其他
    从" Datasource.MD_USER_DETAIL"中将count(DISTINCT(USERID))选择为LV_UserExistCount,其中USERID =:IM_GID;
    IF(TO_INTEGER(LV_UserExistCount)= 0)然后
         
 EX_StatusIndicator ='X1';
 Ex_Status ='您尚未注册,请先注册';


    其他
 从" Datasource.MD_USER_DETAIL"中选择count(DISTINCT(" Password"))放入LV_UserExistPass,其中" Password" =:IM_PASSWD和USERID =:IM_GID;
 IF(TO_INTEGER(:LV_UserExistCount)= 1且TO_INTEGER(:LV_UserExistPass)= 0)然后
 EX_StatusIndicator ='X2';
 Ex_Status ='您未被授权,密码错误';
 从" Datasource.DailyLoginControl"选择LV_Attempt中的" NoOfAttempt",其中GID =:IM_GID;
 LV_Attempt = to_Integer(LV_Attempt)+ 1;
 更新" Datasource.DailyLoginControl"设置为" GID" = IM_GID,"状态" ="失败"," LoggedInat" = current_date," NoOfAttempt" = to_Integer(LV_Attempt)," ResetRequestDate" =" 00000000",其中" GID" = IM_GID和 " LoggedInat" =当前日期;
 承诺;
 ELSEIF(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"  =当前日期;
 承诺;
 ELSEIF(to_Integer(LV_Attempt)> = 3)然后
 EX_StatusIndicator ='X3';
 Ex_Status ='违反! 您的帐户已被锁定';
 万一;



    万一;
 万一;
 结束
 

你好朋友! 我这样做是作为学习。 我要构思并尝试发布!

如果您是HANA的初学者想学习,请使用上面的示例和示例。 这些是我们犯的常见错误! 任何方式! 仍然需要即兴和设计。

这只是为了学习,没有实际必要性或用例。如果确实有用,请点赞。 谢谢。

 @弗洛里安·菲弗(Florian Pfeffer)! 嗯,您如何做出这样的表述:"这听起来不像是一个"挑战",而是像"嘿白痴,为我做我的工作"。 完整的错误日志,而不仅仅是摘要。" 

这只是一个挑战性的问题! 我对提出我不知道的问题或愚蠢的问题并不感到羞愧,不受您的批评威胁。 我希望能够得到推理,支持和思考,而不是您的批评。

感谢您的粗鲁回应! 服务很好的答案! 对此表示敬意! 谢谢,继续努力!!

一周热门 更多>