我有一个 SSIS 解决方案和包。该包包含一个脚本任务,该任务通过 API 调用向 Telegram 发送消息。到目前为止,这一切正常,因为包接收两个变量:API token 和 ChatId。在包内我临时定义了一条要发送的消息。
我在这里担心的是,我想根据包执行期间发生的条件使用相同的脚本发送不同的消息,并且我不希望相同的脚本任务中包含不同的消息。我一直在尝试考虑包变量,但并不真正了解如何使用它们来发送变量消息,因为每个脚本任务都需要不同的变量
这是到目前为止我的控制流程。正如您所看到的,脚本任务根据任务上下文运行多次,需要发送不同的消息。
这是我的脚本任务的主要部分。正如你所看到的,我暂时设置了一条固定消息,这就是我想要动态的消息(将其视为函数参数)
public void Main()
{
///TELEGRAM API
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
string urlString = "https://api.telegram.org/bot{0}/sendMessage?chat_id={1}&text={2}&parse_mode=html";
string apiToken = (String)Dts.Variables["User::TelegramToken"].Value;
string chatId = (String)Dts.Variables["User::TelegramChatId"].Value;
string text = "This is the message to be sent";
urlString = String.Format(urlString, apiToken, chatId, text);
WebRequest request = WebRequest.Create(urlString);
Stream rs = request.GetResponse().GetResponseStream();
StreamReader reader = new StreamReader(rs);
string line = "";
StringBuilder sb = new StringBuilder();
while (line != null)
{
line = reader.ReadLine();
if (line != null)
sb.Append(line);
}
string response = sb.ToString();
///TELEGRAM API
Dts.TaskResult = (int)ScriptResults.Success;
}
EDIT1:我只是想在执行脚本之前使用表达式任务来设置变量。这是一个合适的选择吗?
最佳答案
是的,使用表达式任务来设置消息。以下是我建议的更改:
- 将电报消息之前的所有内容放入序列容器中,并将该序列容器连接到电报脚本任务
- 在包级别添加一个字符串变量来保存消息
- 使用上面序列容器中的表达式设置消息变量
- 用变量引用替换硬编码文本
...
string text = (String)Dts.Variables["User::Message"].Value;
...
关于c# - 如何将动态变化的字符串传递给脚本任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73024913/