public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { NetDimensionsOrganization organization = new NetDimensionsOrganization(); StringBuilder sb = new StringBuilder(); dynamic organizationObject = serializer.Deserialize(reader); organization.Id = organizationObject["id"].ToString(); organization.Description = organizationObject["description"].ToString(); sb.Insert(0, organizationObject["code"].ToString()); dynamic parentOrg = organizationObject["parent"]; while (parentOrg != null) { string parentCode = parentOrg["code"].ToString(); if (!parentCode.ToUpper().Equals("ROOT", StringComparison.InvariantCultureIgnoreCase)) { sb.Insert(0, parentCode + ","); } parentOrg = parentOrg["parent"]; } organization.Code = sb.ToString(); return(organization); }
/// <summary> /// Gets the IDs users of the users in an organization. /// </summary> /// <param name="organizationHierarchyCode">The organization's code in a comma-delimited hierarchy list of organizations (not counting ROOT). e.g.: "PSC,AutoGen"</param> /// <param name="stat">Optional: The state of users to get (e.g. only active users).</param> /// <returns>IDs users of the users in the specified organization</returns> public string[] GetUsersInOrganization(string organizationHierarchyCode, string stat = "") { List <string> users = new List <string>(); NetDimensionsOrganization org = this.GetOrganization(organizationHierarchyCode); if (org != null) { string serviceApiUrl = string.Format(NetDimensionsConstants.ApiGetUserInOrganization, this.LmsUrl); using (WebClient apiWebClient = new WebClient()) { apiWebClient.Headers[HttpRequestHeader.ContentType] = "application/xml"; apiWebClient.Credentials = new NetworkCredential(this.UserAuthUser, this.SysAuthKey); apiWebClient.QueryString.Add("organizationId", org.Id); if (!string.IsNullOrWhiteSpace(stat)) { apiWebClient.QueryString.Add("status", stat); } string retVal = apiWebClient.UploadString(serviceApiUrl, "GET"); XmlDocument doc = new XmlDocument(); XmlNamespaceManager ns = new XmlNamespaceManager(doc.NameTable); doc.LoadXml(retVal); ns.AddNamespace(doc.DocumentElement.Prefix, doc.DocumentElement.NamespaceURI); XmlNodeList userNodes = doc.DocumentElement.SelectNodes(string.Format("//{0}:user/{0}:id", doc.DocumentElement.Prefix), ns); foreach (XmlNode xn in userNodes) { users.Add(xn.InnerText); } } } return(users.ToArray()); }
/// <summary> /// Gets details of an organization. /// </summary> /// <param name="organizationHierarchyCode">The organization's code in a comma-delimited hierarchy list of organizations (not counting ROOT). e.g.: "PSC,AutoGen"</param> /// <returns>Details of the organization.</returns> public NetDimensionsOrganization GetOrganization(string organizationHierarchyCode) { if (string.IsNullOrWhiteSpace(organizationHierarchyCode)) { return(null); } string serviceApiUrl = string.Format(NetDimensionsConstants.ApiGetOrganization, this.LmsUrl); NetDimensionsOrganization currentOrganization = null; string currentLevelOrganizationsJs = string.Empty; using (WebClient apiWebClient = new WebClient()) { apiWebClient.Headers[HttpRequestHeader.ContentType] = "application/xml"; apiWebClient.Credentials = new NetworkCredential(this.UserAuthUser, this.UserAuthPass); apiWebClient.QueryString.Add("id", "*ROOT*"); apiWebClient.QueryString.Add("recursive", "false"); apiWebClient.QueryString.Add("format", "json"); try { currentLevelOrganizationsJs = apiWebClient.UploadString(serviceApiUrl, "GET"); } catch (WebException) { //Not found or not authorised return(null); } currentOrganization = JsonConvert.DeserializeObject <NetDimensionsOrganization>(currentLevelOrganizationsJs); string[] organizationsHierarchy = organizationHierarchyCode.Split(','); foreach (string org in organizationsHierarchy) { currentOrganization = currentOrganization.Children.FirstOrDefault(o => o.Code.Trim().Equals(org.Trim(), StringComparison.InvariantCultureIgnoreCase)); if (currentOrganization != null) { apiWebClient.QueryString["id"] = currentOrganization.Id; try { currentLevelOrganizationsJs = apiWebClient.UploadString(serviceApiUrl, "GET"); } catch (WebException) { //Not found or not authorised return(null); } currentOrganization = JsonConvert.DeserializeObject <NetDimensionsOrganization>(currentLevelOrganizationsJs); } } } return(currentOrganization); }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { NetDimensionsOrganization organization = new NetDimensionsOrganization(); StringBuilder sb = new StringBuilder(); dynamic organizationObject = serializer.Deserialize(reader); organization.Id = organizationObject["id"].ToString(); organization.Description = organizationObject["description"].ToString(); sb.Insert(0, organizationObject["code"].ToString()); dynamic parentOrg = organizationObject["parent"]; while (parentOrg != null) { string parentCode = parentOrg["code"].ToString(); if (!parentCode.ToUpper().Equals("ROOT", StringComparison.InvariantCultureIgnoreCase)) sb.Insert(0, parentCode + ","); parentOrg = parentOrg["parent"]; } organization.Code = sb.ToString(); return organization; }
/// <summary> /// Creates users in the LMS. Also adds their related organizations if needed, and assigns the users to them. /// </summary> /// <param name="users">The users to create.</param> /// <returns>The results of the users creation. Including any errors and warnings from the LMS.</returns> public UserActionResults CreateUsers(NetDimensionsUser[] users) { if (users.Length == 0) { return(null); } if ((users.Any(u => string.IsNullOrWhiteSpace(u.UserID))) || (users.Any(u => string.IsNullOrWhiteSpace(u.LastName)) || (users.Any(u => string.IsNullOrWhiteSpace(u.FirstName))) || (users.Any(u => string.IsNullOrWhiteSpace(u.Password))) || (users.Any(u => string.IsNullOrWhiteSpace(u.Email))))) { throw new ArgumentException("To create a user, the following fields are mandatory: UserID, LastName, FirstName, Password, Email"); } UserActionResults result = null; string serviceApiUrl = string.Format(NetDimensionsConstants.ApiUsersCsv, this.LmsUrl); string usersCsv = NetDimensionsUser.GetCsv(NetDimensionsConstants.UserActions.AddOrUpdate, users); using (WebClient apiWebClient = new WebClient()) { apiWebClient.Headers[HttpRequestHeader.ContentType] = "text/plain"; apiWebClient.Credentials = new NetworkCredential(this.UserAuthUser, this.SysAuthKey); string csvResponse = Encoding.UTF8.GetString(apiWebClient.UploadData( serviceApiUrl, "POST", Encoding.ASCII.GetBytes(usersCsv))); result = new UserActionResults(csvResponse); } Dictionary <NetDimensionsOrganization, List <string> > organizationUsers = new Dictionary <NetDimensionsOrganization, List <string> >(); foreach (NetDimensionsUser user in users) { if (user.Organization != null) { NetDimensionsOrganization organizationInList = organizationUsers.Keys.FirstOrDefault(o => o.Code == user.Organization.Code); if (organizationInList == null) { organizationUsers.Add(user.Organization, new List <string>()); } organizationInList = organizationUsers.Keys.FirstOrDefault(o => o.Code == user.Organization.Code); if (string.IsNullOrWhiteSpace(organizationInList.Description)) { organizationInList.Description = user.Organization.Description; } if (!organizationUsers[organizationInList].Contains(user.UserID)) { organizationUsers[organizationInList].Add(user.UserID); } } } foreach (KeyValuePair <NetDimensionsOrganization, List <string> > organization in organizationUsers) { this.CreateOrganization(organization.Key.Code, organization.Key.Description); this.AddUsersToOrganization(organization.Value.ToArray(), organization.Key.Code); } return(result); }