Kentico UserInfoProvider在控制台应用程序中无法正常工作

时间:2015-02-04 16:01:41

标签: c# kentico

此代码在Kentico网站中正常运行:

var users = UserInfoProvider.GetUsers();
for (int x = 0; x < users.Count(); x++
{
    UserInfo currentUser = users.ElementAt(x);
    currentUser.SetValue("AcceptsAlerts", equivalentSubscriber.Status != SubscriberStatus.Unsubscribed);
    UserInfoProvider.SetUserInfo(currentUser);
}

当我将代码移动到控制台应用程序时,对UserInfoProvider的任何调用都会导致错误:“找不到对象类型'cms.usersettings'”

对于获取用户的初始调用,我可以在控制台应用程序中这样做:

DataSet usersds = new CMS.DataEngine.DataQuery("cms.user.selectall").Execute();

然后使用用户数据循环遍历数据集的Table1:

UserInfo currentUser = new UserInfo(dtUsers.Rows[x]);

一切都很好并且正常工作,直到我将更新的用户写回数据库。除了调用之外,我找不到另一种写入数据的方法:

UserInfoProvider.SetUserInfo(currentUser);

有没有人知道另一种保存用户数据的方法?或者解决错误。错误是运行时错误,据我所知,我已经引用了我需要的所有内容。我正在编辑的字段是添加到cmsUser表的自定义字段。

使用信息语句:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net;
using System.Web;
using CMS;
using CMS.CustomTables;
using CMS.DataEngine;
using CMS.Membership;

3 个答案:

答案 0 :(得分:5)

在开始使用外部应用程序中的Kentico CMS API之前,请确保调用以下行:

CMS.DataEngine.ConnectionHelper.ConnectionString = "your connection string";
CMS.Base.SystemContext.WebApplicationPhysicalPath = Application.StartupPath;
CMS.DataEngine.CMSApplication.Init();

然后,您还可以使用UserInfoProvider.GetUsers()object query而不是DataQuery.Execute()

答案 1 :(得分:1)

您确定要引用所有必要的程序集吗?

以下方案适用于我的计算机上的配置: Kentico 8.x Web应用程序项目

  1. 在控制台应用程序中引用 lib 文件夹

    中的这些程序集
    • CMS.Base
    • CMS.DataEngine
    • CMS.DataProviderSQL
    • CMS.Membership
  2. 然后将连接字符串从Web应用程序的 web.config 复制到控制台应用程序的 App.config

  3. 之后,您可以使用此代码设置自定义用户属性

    static void Main(string[] args)
    {
        var users = UserInfoProvider.GetUsers();
    
        foreach (var user in users)
        {
            user.SetValue("myTestString", "test");
            user.Generalized.SetObject();
        }
    }
    

答案 2 :(得分:0)

对于想要从外部应用程序(例如获取电子邮件模板)获取API调用的SiteID的任何人,这可能会对您有所帮助。在Kentico 8.1中,您可以访问网站&gt;常规并获取您网站的代码名称。然后你可以这样做:

int siteID = CMS.SiteProvider.SiteInfoProvider.GetSiteID("<your site code name>");

希望它有所帮助!