【问题标题】:Why does Adaptive Card Input.Date subtract 1 day from the selected date?为什么 Adaptive Card Input.Date 从所选日期中减去 1 天?
【发布时间】:2021-12-13 16:20:04
【问题描述】:

在 msteams 频道中使用 botframework。

自适应卡。没什么特别的,只是一些文本块和日期输入。输入值保存到内存中。

{
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "type": "AdaptiveCard",
  "version": "1.3",
  "body": [
    {
      "type": "ColumnSet",
      "columns": [
        {
          "type": "Column",
          "style": "emphasis",
          "width": 2,
          "items": [
            {
              "type": "TextBlock",
              "text": "Please enter the information below",
              "size": "Large"
            },
            {
              "type": "Container",
              "style": "emphasis",
              "items": [
                {
                  "type": "TextBlock",
                  "text": "End Of Last Month",
                  "wrap": true
                },
                {
                  "type": "Input.Date",                  
                  "id": "Date_EndOfLastMonth",
                  "value": "${dialog.requestForm.Date_EndOfLastMonth}",
                  "placeholder": ""
                },
                {
                  "type": "TextBlock",
                  "text": "${dialog.requestForm.Date_EndOfLastMonthError}",
                  "size": "small",
                  "wrap": true,
                  "color": "attention"
                }
              ]
            },
            {
              "type": "Container",
              "style": "emphasis",
              "items": [
                {
                  "type": "TextBlock",
                  "text": "End Of Last Year",
                  "wrap": true
                },
                {
                  "type": "Input.Date",                  
                  "id": "Date_EndOfLastYear",
                  "value": "${dialog.requestForm.Date_EndOfLastYear}",
                  "placeholder": ""
                },
                {
                  "type": "TextBlock",
                  "text": "${dialog.requestForm.Date_EndOfLastYearError}",
                  "size": "small",
                  "wrap": true,
                  "color": "attention"
                }
              ]
            },
            {
              "type": "Container",
              "style": "emphasis",
              "items": [
                {
                  "type": "TextBlock",
                  "text": "Valuation Key Date",
                  "wrap": true
                },
                {
                  "type": "Input.Date",                  
                  "id": "ValuationKeyDate",
                  "value": "${dialog.requestForm.ValuationKeyDate}",
                  "placeholder": ""
                },
                {
                  "type": "TextBlock",
                  "text": "${dialog.requestForm.ValuationKeyDateError}",
                  "size": "small",
                  "wrap": true,
                  "color": "attention"
                }
              ]
            },
            {
              "type": "Container",
              "style": "emphasis",
              "items": [
                {
                  "type": "ActionSet",
                  "actions": [
                    {
                      "type": "Action.Submit",
                      "title": "Submit",
                      "data": {
                        "msteams": {
                          "type": "messageBack",
                          "displayText": "Form Submitted",
                          "text": "submitform"
                        }
                      }
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

卡片附带的代码。我将输入值保存到内存中,因此当出现重新提示时,我可以将它们填回到表单中。最后一部分是调试行。我直接从活动中打印出值,所以提交和调试之间没有任何反应。

new CodeAction(async (dc, options) =>
                            {
                                dc.State.SetValue("dialog.requestForm.Date_EndOfLastMonth", "");
                                dc.State.SetValue("dialog.requestForm.Date_EndOfLastYear", "");
                                dc.State.SetValue("dialog.requestForm.ValuationKeyDate", ""); //ValuationKeyDate

                                dc.State.SetValue("dialog.requestForm.Date_EndOfLastMonthError", "");
                                dc.State.SetValue("dialog.requestForm.Date_EndOfLastYearError", "");
                                dc.State.SetValue("dialog.requestForm.ValuationKeyDateError", "");

                                return await dc.EndDialogAsync();
                            }),
                            new TextInput()
                            {
                                Id = "repromptTRT",
                                Prompt = new ActivityTemplate("${TreasuryCase()}"),
                                AllowInterruptions = true,
                                MaxTurnCount = "if(turn.activity.text != 'submitform', '0', '100')",
                            },                            
                            // deal with interrupt, cancel everything else                            
                            new IfCondition()
                            {
                                Condition = "turn.activity.text != 'submitform'",
                                Actions = new List<Dialog>()
                                {
                                    new EndDialog()
                                }
                            },
                            // save form
                            new CodeAction(async (dc, options) =>
                            {
                                var json = JsonConvert.SerializeObject(dc.Context.Activity.Value);

                                await dc.Context.SendActivityAsync(MessageFactory.Text(json));

                                var d = JsonConvert.SerializeObject(DateTime.Now);

                                await dc.Context.SendActivityAsync(MessageFactory.Text(d));

                                var o = JsonConvert.DeserializeObject<TC>(json);                                

                                dc.State.SetValue("dialog.requestForm", o);

                                return await dc.EndDialogAsync();
                            }),  

【问题讨论】:

  • 您是否在代码中执行任何日期操作逻辑?
  • @VinothRajendran 不。你在下面看到的是 dc.Context.Activity.Value 的值,底部是实际的日期时间。而且我认为它甚至不是一个日期,而是一个字符串。
  • 你能分享你的自适应卡吗?这是否发生在 MSTeams 之外的其他渠道中?
  • @AronGaborKelsch:这里是线程:github.com/MicrosoftDocs/msteams-docs/issues/4355
  • @AronGaborKelsch,该修复程序应该会不断完善,因此更改应该会在几周内体现在公共客户中。谢谢!

标签: date datepicker botframework microsoft-teams adaptive-cards


【解决方案1】:

为了获得更多可见性,请在评论部分添加答案: 修复应该在各个环节进行,因此更改应该会在几周内体现在公共客户中。

【讨论】:

  • 这个问题现在时断时续。我和我的用户在同一个租户上,但是在我的机器上问题仍然存在。用户报告该问题消失并再次出现。那么这是如何工作的呢?
  • 是的,我们已经通知了工程团队,他们目前正在解决这个问题。一旦我们有进一步的更新,我们会通知您。谢谢!
猜你喜欢
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多