Add CRM2013 support and update CRM2011 provider

This commit is contained in:
dev_amdtel 2014-01-31 15:46:30 +04:00
parent c4c09fa739
commit 20f64c90b5
68 changed files with 191845 additions and 2304 deletions

View file

@ -2797,4 +2797,300 @@ WHERE
AND (@OrgID = 0 OR @OrgID <> 0 AND PA.OrgID = @OrgID)
END
GO
-- Enterprise Storage Quotas
IF NOT EXISTS (SELECT * FROM [dbo].[Quotas] WHERE [QuotaName] = 'EnterpriseStorage.DiskStorageSpace')
BEGIN
INSERT [dbo].[Quotas] ([QuotaID], [GroupID],[QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (430, 44, 1,N'EnterpriseStorage.DiskStorageSpace',N'Disk Storage Space (Gb)',2, 0 , NULL)
END
GO
UPDATE [dbo].[Quotas] SET [QuotaDescription] = N'Disk Storage Space (Gb)' WHERE [QuotaName] = 'EnterpriseStorage.DiskStorageSpace'
GO
IF NOT EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'EnterpriseFolders')
CREATE TABLE [dbo].[EnterpriseFolders](
[EnterpriseFolderID] [int] IDENTITY(1,1) NOT NULL,
[ItemID] [int] NOT NULL,
[FolderName] [nvarchar](255) NOT NULL,
[FolderQuota] [int] NOT NULL DEFAULT 0,
CONSTRAINT [PK_EnterpriseFolders] PRIMARY KEY CLUSTERED
(
[EnterpriseFolderId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)
GO
ALTER FUNCTION [dbo].[CalculateQuotaUsage]
(
@PackageID int,
@QuotaID int
)
RETURNS int
AS
BEGIN
DECLARE @QuotaTypeID int
SELECT @QuotaTypeID = QuotaTypeID FROM Quotas
WHERE QuotaID = @QuotaID
IF @QuotaTypeID <> 2
RETURN 0
DECLARE @Result int
IF @QuotaID = 52 -- diskspace
SET @Result = dbo.CalculatePackageDiskspace(@PackageID)
ELSE IF @QuotaID = 51 -- bandwidth
SET @Result = dbo.CalculatePackageBandwidth(@PackageID)
ELSE IF @QuotaID = 53 -- domains
SET @Result = (SELECT COUNT(D.DomainID) FROM PackagesTreeCache AS PT
INNER JOIN Domains AS D ON D.PackageID = PT.PackageID
WHERE IsSubDomain = 0 AND IsInstantAlias = 0 AND IsDomainPointer = 0 AND PT.ParentPackageID = @PackageID)
ELSE IF @QuotaID = 54 -- sub-domains
SET @Result = (SELECT COUNT(D.DomainID) FROM PackagesTreeCache AS PT
INNER JOIN Domains AS D ON D.PackageID = PT.PackageID
WHERE IsSubDomain = 1 AND IsInstantAlias = 0 AND IsDomainPointer = 0 AND PT.ParentPackageID = @PackageID)
ELSE IF @QuotaID = 220 -- domain pointers
SET @Result = (SELECT COUNT(D.DomainID) FROM PackagesTreeCache AS PT
INNER JOIN Domains AS D ON D.PackageID = PT.PackageID
WHERE IsDomainPointer = 1 AND PT.ParentPackageID = @PackageID)
ELSE IF @QuotaID = 71 -- scheduled tasks
SET @Result = (SELECT COUNT(S.ScheduleID) FROM PackagesTreeCache AS PT
INNER JOIN Schedule AS S ON S.PackageID = PT.PackageID
WHERE PT.ParentPackageID = @PackageID)
ELSE IF @QuotaID = 305 -- RAM of VPS
SET @Result = (SELECT SUM(CAST(SIP.PropertyValue AS int)) FROM ServiceItemProperties AS SIP
INNER JOIN ServiceItems AS SI ON SIP.ItemID = SI.ItemID
INNER JOIN PackagesTreeCache AS PT ON SI.PackageID = PT.PackageID
WHERE SIP.PropertyName = 'RamSize' AND PT.ParentPackageID = @PackageID)
ELSE IF @QuotaID = 306 -- HDD of VPS
SET @Result = (SELECT SUM(CAST(SIP.PropertyValue AS int)) FROM ServiceItemProperties AS SIP
INNER JOIN ServiceItems AS SI ON SIP.ItemID = SI.ItemID
INNER JOIN PackagesTreeCache AS PT ON SI.PackageID = PT.PackageID
WHERE SIP.PropertyName = 'HddSize' AND PT.ParentPackageID = @PackageID)
ELSE IF @QuotaID = 309 -- External IP addresses of VPS
SET @Result = (SELECT COUNT(PIP.PackageAddressID) FROM PackageIPAddresses AS PIP
INNER JOIN IPAddresses AS IP ON PIP.AddressID = IP.AddressID
INNER JOIN PackagesTreeCache AS PT ON PIP.PackageID = PT.PackageID
WHERE PT.ParentPackageID = @PackageID AND IP.PoolID = 3)
ELSE IF @QuotaID = 100 -- Dedicated Web IP addresses
SET @Result = (SELECT COUNT(PIP.PackageAddressID) FROM PackageIPAddresses AS PIP
INNER JOIN IPAddresses AS IP ON PIP.AddressID = IP.AddressID
INNER JOIN PackagesTreeCache AS PT ON PIP.PackageID = PT.PackageID
WHERE PT.ParentPackageID = @PackageID AND IP.PoolID = 2)
ELSE IF @QuotaID = 350 -- RAM of VPSforPc
SET @Result = (SELECT SUM(CAST(SIP.PropertyValue AS int)) FROM ServiceItemProperties AS SIP
INNER JOIN ServiceItems AS SI ON SIP.ItemID = SI.ItemID
INNER JOIN PackagesTreeCache AS PT ON SI.PackageID = PT.PackageID
WHERE SIP.PropertyName = 'Memory' AND PT.ParentPackageID = @PackageID)
ELSE IF @QuotaID = 351 -- HDD of VPSforPc
SET @Result = (SELECT SUM(CAST(SIP.PropertyValue AS int)) FROM ServiceItemProperties AS SIP
INNER JOIN ServiceItems AS SI ON SIP.ItemID = SI.ItemID
INNER JOIN PackagesTreeCache AS PT ON SI.PackageID = PT.PackageID
WHERE SIP.PropertyName = 'HddSize' AND PT.ParentPackageID = @PackageID)
ELSE IF @QuotaID = 354 -- External IP addresses of VPSforPc
SET @Result = (SELECT COUNT(PIP.PackageAddressID) FROM PackageIPAddresses AS PIP
INNER JOIN IPAddresses AS IP ON PIP.AddressID = IP.AddressID
INNER JOIN PackagesTreeCache AS PT ON PIP.PackageID = PT.PackageID
WHERE PT.ParentPackageID = @PackageID AND IP.PoolID = 3)
ELSE IF @QuotaID = 319 -- BB Users
SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts ea
INNER JOIN BlackBerryUsers bu ON ea.AccountID = bu.AccountID
INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID
INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID
WHERE pt.ParentPackageID = @PackageID)
ELSE IF @QuotaID = 320 -- OCS Users
SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts ea
INNER JOIN OCSUsers ocs ON ea.AccountID = ocs.AccountID
INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID
INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID
WHERE pt.ParentPackageID = @PackageID)
ELSE IF @QuotaID = 206 -- HostedSolution.Users
SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts AS ea
INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID
INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID
WHERE pt.ParentPackageID = @PackageID AND ea.AccountType IN (1,5,6,7))
ELSE IF @QuotaID = 78 -- Exchange2007.Mailboxes
SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts AS ea
INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID
INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID
WHERE pt.ParentPackageID = @PackageID
AND ea.AccountType IN (1)
AND ea.MailboxPlanId IS NOT NULL)
ELSE IF @QuotaID = 77 -- Exchange2007.DiskSpace
SET @Result = (SELECT SUM(B.MailboxSizeMB) FROM ExchangeAccounts AS ea
INNER JOIN ExchangeMailboxPlans AS B ON ea.MailboxPlanId = B.MailboxPlanId
INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID
INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID
WHERE pt.ParentPackageID = @PackageID)
ELSE IF @QuotaID = 370 -- Lync.Users
SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts AS ea
INNER JOIN LyncUsers lu ON ea.AccountID = lu.AccountID
INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID
INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID
WHERE pt.ParentPackageID = @PackageID)
ELSE IF @QuotaID = 376 -- Lync.EVUsers
SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts AS ea
INNER JOIN LyncUsers lu ON ea.AccountID = lu.AccountID
INNER JOIN LyncUserPlans lp ON lu.LyncUserPlanId = lp.LyncUserPlanId
INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID
INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID
WHERE pt.ParentPackageID = @PackageID AND lp.EnterpriseVoice = 1)
ELSE IF @QuotaID = 381 -- Dedicated Lync Phone Numbers
SET @Result = (SELECT COUNT(PIP.PackageAddressID) FROM PackageIPAddresses AS PIP
INNER JOIN IPAddresses AS IP ON PIP.AddressID = IP.AddressID
INNER JOIN PackagesTreeCache AS PT ON PIP.PackageID = PT.PackageID
WHERE PT.ParentPackageID = @PackageID AND IP.PoolID = 5)
ELSE IF @QuotaID = 430 -- Enterprise Storage
SET @Result = (SELECT SUM(ESF.FolderQuota) FROM EnterpriseFolders AS ESF
INNER JOIN ServiceItems SI ON ESF.ItemID = SI.ItemID
INNER JOIN PackagesTreeCache PT ON SI.PackageID = PT.PackageID
WHERE PT.ParentPackageID = @PackageID)
ELSE IF @QuotaID = 431 -- Enterprise Storage Folders
SET @Result = (SELECT COUNT(ESF.EnterpriseFolderID) FROM EnterpriseFolders AS ESF
INNER JOIN ServiceItems SI ON ESF.ItemID = SI.ItemID
INNER JOIN PackagesTreeCache PT ON SI.PackageID = PT.PackageID
WHERE PT.ParentPackageID = @PackageID)
ELSE
SET @Result = (SELECT COUNT(SI.ItemID) FROM Quotas AS Q
INNER JOIN ServiceItems AS SI ON SI.ItemTypeID = Q.ItemTypeID
INNER JOIN PackagesTreeCache AS PT ON SI.PackageID = PT.PackageID AND PT.ParentPackageID = @PackageID
WHERE Q.QuotaID = @QuotaID)
RETURN @Result
END
GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddEnterpriseFolder')
DROP PROCEDURE [dbo].[AddEnterpriseFolder]
GO
CREATE PROCEDURE [dbo].[AddEnterpriseFolder]
(
@FolderID INT OUTPUT,
@ItemID INT,
@FolderName NVARCHAR(255)
)
AS
INSERT INTO EnterpriseFolders
(
ItemID,
FolderName
)
VALUES
(
@ItemID,
@FolderName
)
SET @FolderID = SCOPE_IDENTITY()
RETURN
GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteEnterpriseFolder')
DROP PROCEDURE DeleteEnterpriseFolder
GO
CREATE PROCEDURE [dbo].[DeleteEnterpriseFolder]
(
@ItemID INT,
@FolderName NVARCHAR(255)
)
AS
DELETE FROM EnterpriseFolders
WHERE ItemID = @ItemID AND FolderName = @FolderName
GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'UpdateEnterpriseFolder')
DROP PROCEDURE UpdateEnterpriseFolder
GO
CREATE PROCEDURE [dbo].[UpdateEnterpriseFolder]
(
@ItemID INT,
@FolderID NVARCHAR(255),
@FolderName NVARCHAR(255),
@FolderQuota INT
)
AS
UPDATE EnterpriseFolders SET
FolderName = @FolderName,
FolderQuota = @FolderQuota
WHERE ItemID = @ItemID AND FolderName = @FolderID
GO
-- Enterprise Storage Quotas
IF NOT EXISTS (SELECT * FROM [dbo].[Quotas] WHERE [QuotaName] = 'EnterpriseStorage.DiskStorageSpace')
BEGIN
INSERT [dbo].[Quotas] ([QuotaID], [GroupID],[QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (430, 44, 1,N'EnterpriseStorage.DiskStorageSpace',N'Disk Storage Space (Mb)',2, 0 , NULL)
END
GO
UPDATE [dbo].[Quotas] SET [QuotaDescription] = N'Disk Storage Space (Mb)' WHERE [QuotaName] = 'EnterpriseStorage.DiskStorageSpace'
GO
-- CRM2013
-- CRM2013 ResourceGroup
IF NOT EXISTS (SELECT * FROM [dbo].[ResourceGroups] WHERE [GroupName] = 'Hosted CRM2013')
BEGIN
INSERT [dbo].[ResourceGroups] ([GroupID], [GroupName], [GroupOrder], [GroupController], [ShowGroup]) VALUES (24, N'Hosted CRM2013', 15, NULL, 1)
END
GO
-- CRM2013 Provider
IF NOT EXISTS (SELECT * FROM [dbo].[Providers] WHERE [DisplayName] = 'Hosted MS CRM 2013')
BEGIN
INSERT [dbo].[Providers] ([ProviderId], [GroupId], [ProviderName], [DisplayName], [ProviderType], [EditorControl], [DisableAutoDiscovery])
VALUES(1202, 24, N'CRM', N'Hosted MS CRM 2013', N'WebsitePanel.Providers.HostedSolution.CRMProvider2013, WebsitePanel.Providers.HostedSolution.Crm2013', N'CRM2011', NULL)
END
GO
-- CRM2013 Quotas
IF NOT EXISTS (SELECT * FROM [dbo].[Quotas] WHERE [QuotaName] = 'HostedCRM2013.Organization')
BEGIN
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota])
VALUES (463, 24, 1, N'HostedCRM2013.Organization', N'CRM Organization', 1, 0, NULL, NULL)
END
GO
IF NOT EXISTS (SELECT * FROM [dbo].[Quotas] WHERE [QuotaName] = 'HostedCRM2013.MaxDatabaseSize')
BEGIN
INSERT [dbo].[Quotas] ([QuotaID], [GroupID],[QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID])
VALUES (464, 24, 5, N'HostedCRM2013.MaxDatabaseSize', N'Max Database Size, MB',3, 0 , NULL)
END
GO
IF NOT EXISTS (SELECT * FROM [dbo].[Quotas] WHERE [QuotaName] = 'HostedCRM2013.EssentialUsers')
BEGIN
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID], [HideQuota])
VALUES (465, 24, 2, N'HostedCRM2013.EssentialUsers', N'Essential licenses per organization', 3, 0, NULL, NULL)
END
GO
IF NOT EXISTS (SELECT * FROM [dbo].[Quotas] WHERE [QuotaName] = 'HostedCRM2013.BasicUsers')
BEGIN
INSERT [dbo].[Quotas] ([QuotaID], [GroupID],[QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID])
VALUES (466, 24, 3, N'HostedCRM2013.BasicUsers', N'Basic licenses per organization',3, 0 , NULL)
END
GO
IF NOT EXISTS (SELECT * FROM [dbo].[Quotas] WHERE [QuotaName] = 'HostedCRM2013.ProfessionalUsers')
BEGIN
INSERT [dbo].[Quotas] ([QuotaID], [GroupID],[QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID])
VALUES (467, 24, 4, N'HostedCRM2013.ProfessionalUsers', N'Professional licenses per organization',3, 0 , NULL)
END
GO

View file

@ -0,0 +1,50 @@
// Copyright (c) 2012, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WebsitePanel.EnterpriseServer;
namespace WebsitePanel.EnterpriseServer
{
public class CRMUserLycenseTypes
{
// CRM 2011
public const int FULL = 0;
public const int LIMITED = 2;
public const int ESS = 22;
// CRM 2013
public const int PROFESSIONAL = 0;
public const int BASIC = 2;
public const int ESSENTIAL = 5;
}
}

View file

@ -163,6 +163,14 @@ order by rg.groupOrder
public const string CRM_ESSUSERS = "HostedCRM.ESSUsers";
public const string CRM_MAXDATABASESIZE = "HostedCRM.MaxDatabaseSize";
public const string CRM2013_ORGANIZATION = "HostedCRM2013.Organization";
public const string CRM2013_MAXDATABASESIZE = "HostedCRM2013.MaxDatabaseSize";
public const string CRM2013_ESSENTIALUSERS = "HostedCRM2013.EssentialUsers";
public const string CRM2013_BASICUSERS = "HostedCRM2013.BasicUsers";
public const string CRM2013_PROFESSIONALUSERS = "HostedCRM2013.ProfessionalUsers";
public const string VPS_SERVERS_NUMBER = "VPS.ServersNumber"; // Number of VPS
public const string VPS_MANAGING_ALLOWED = "VPS.ManagingAllowed"; // Allow user to create VPS
public const string VPS_CPU_NUMBER = "VPS.CpuNumber"; // Number of CPU cores

View file

@ -47,6 +47,7 @@ namespace WebsitePanel.EnterpriseServer
public const string Exchange = "Exchange";
public const string HostedOrganizations = "Hosted Organizations";
public const string HostedCRM = "Hosted CRM";
public const string HostedCRM2013 = "Hosted CRM2013";
public const string VPS = "VPS";
public const string BlackBerry = "BlackBerry";
public const string OCS = "OCS";

View file

@ -117,6 +117,7 @@
<Compile Include="Ecommerce\TriggerSystem\ITriggerHandler.cs" />
<Compile Include="ExchangeServer\ExchangeEmailAddress.cs" />
<Compile Include="HostedSolution\AdditionalGroup.cs" />
<Compile Include="HostedSolution\CRMLycenseTypes.cs" />
<Compile Include="HostedSolution\ESPermission.cs" />
<Compile Include="Log\LogRecord.cs" />
<Compile Include="Packages\HostingPlanContext.cs" />

View file

@ -26,23 +26,11 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.5466
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
//
// This source code was auto-generated by wsdl, Version=2.0.50727.42.
//
using WebsitePanel.Providers;
using WebsitePanel.Providers.Common;
using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.Providers.ResultObjects;
//
// This source code was auto-generated by wsdl, Version=2.0.50727.42.
//
@ -67,8 +55,12 @@ namespace WebsitePanel.EnterpriseServer {
private System.Threading.SendOrPostCallback GetCollationOperationCompleted;
private System.Threading.SendOrPostCallback GetCollationByServiceIdOperationCompleted;
private System.Threading.SendOrPostCallback GetCurrencyOperationCompleted;
private System.Threading.SendOrPostCallback GetCurrencyByServiceIdOperationCompleted;
private System.Threading.SendOrPostCallback DeleteCRMOrganizationOperationCompleted;
private System.Threading.SendOrPostCallback GetCRMUsersPagedOperationCompleted;
@ -95,6 +87,10 @@ namespace WebsitePanel.EnterpriseServer {
private System.Threading.SendOrPostCallback GetMaxDBSizeOperationCompleted;
private System.Threading.SendOrPostCallback GetInstalledLanguagePacksOperationCompleted;
private System.Threading.SendOrPostCallback GetInstalledLanguagePacksByServiceIdOperationCompleted;
/// <remarks/>
public esCRM() {
this.Url = "http://localhost:9002/esCRM.asmx";
@ -106,9 +102,15 @@ namespace WebsitePanel.EnterpriseServer {
/// <remarks/>
public event GetCollationCompletedEventHandler GetCollationCompleted;
/// <remarks/>
public event GetCollationByServiceIdCompletedEventHandler GetCollationByServiceIdCompleted;
/// <remarks/>
public event GetCurrencyCompletedEventHandler GetCurrencyCompleted;
/// <remarks/>
public event GetCurrencyByServiceIdCompletedEventHandler GetCurrencyByServiceIdCompleted;
/// <remarks/>
public event DeleteCRMOrganizationCompletedEventHandler DeleteCRMOrganizationCompleted;
@ -148,9 +150,15 @@ namespace WebsitePanel.EnterpriseServer {
/// <remarks/>
public event GetMaxDBSizeCompletedEventHandler GetMaxDBSizeCompleted;
/// <remarks/>
public event GetInstalledLanguagePacksCompletedEventHandler GetInstalledLanguagePacksCompleted;
/// <remarks/>
public event GetInstalledLanguagePacksByServiceIdCompletedEventHandler GetInstalledLanguagePacksByServiceIdCompleted;
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/CreateOrganization", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public OrganizationResult CreateOrganization(int organizationId, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string regionName, int userId, string collation) {
public OrganizationResult CreateOrganization(int organizationId, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string regionName, int userId, string collation, int baseLanguageCode) {
object[] results = this.Invoke("CreateOrganization", new object[] {
organizationId,
baseCurrencyCode,
@ -158,12 +166,13 @@ namespace WebsitePanel.EnterpriseServer {
baseCurrencySymbol,
regionName,
userId,
collation});
collation,
baseLanguageCode});
return ((OrganizationResult)(results[0]));
}
/// <remarks/>
public System.IAsyncResult BeginCreateOrganization(int organizationId, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string regionName, int userId, string collation, System.AsyncCallback callback, object asyncState) {
public System.IAsyncResult BeginCreateOrganization(int organizationId, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string regionName, int userId, string collation, int baseLanguageCode, System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("CreateOrganization", new object[] {
organizationId,
baseCurrencyCode,
@ -171,7 +180,8 @@ namespace WebsitePanel.EnterpriseServer {
baseCurrencySymbol,
regionName,
userId,
collation}, callback, asyncState);
collation,
baseLanguageCode}, callback, asyncState);
}
/// <remarks/>
@ -181,12 +191,12 @@ namespace WebsitePanel.EnterpriseServer {
}
/// <remarks/>
public void CreateOrganizationAsync(int organizationId, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string regionName, int userId, string collation) {
this.CreateOrganizationAsync(organizationId, baseCurrencyCode, baseCurrencyName, baseCurrencySymbol, regionName, userId, collation, null);
public void CreateOrganizationAsync(int organizationId, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string regionName, int userId, string collation, int baseLanguageCode) {
this.CreateOrganizationAsync(organizationId, baseCurrencyCode, baseCurrencyName, baseCurrencySymbol, regionName, userId, collation, baseLanguageCode, null);
}
/// <remarks/>
public void CreateOrganizationAsync(int organizationId, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string regionName, int userId, string collation, object userState) {
public void CreateOrganizationAsync(int organizationId, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string regionName, int userId, string collation, int baseLanguageCode, object userState) {
if ((this.CreateOrganizationOperationCompleted == null)) {
this.CreateOrganizationOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateOrganizationOperationCompleted);
}
@ -197,7 +207,8 @@ namespace WebsitePanel.EnterpriseServer {
baseCurrencySymbol,
regionName,
userId,
collation}, this.CreateOrganizationOperationCompleted, userState);
collation,
baseLanguageCode}, this.CreateOrganizationOperationCompleted, userState);
}
private void OnCreateOrganizationOperationCompleted(object arg) {
@ -248,6 +259,47 @@ namespace WebsitePanel.EnterpriseServer {
}
}
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetCollationByServiceId", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public StringArrayResultObject GetCollationByServiceId(int serviceId) {
object[] results = this.Invoke("GetCollationByServiceId", new object[] {
serviceId});
return ((StringArrayResultObject)(results[0]));
}
/// <remarks/>
public System.IAsyncResult BeginGetCollationByServiceId(int serviceId, System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("GetCollationByServiceId", new object[] {
serviceId}, callback, asyncState);
}
/// <remarks/>
public StringArrayResultObject EndGetCollationByServiceId(System.IAsyncResult asyncResult) {
object[] results = this.EndInvoke(asyncResult);
return ((StringArrayResultObject)(results[0]));
}
/// <remarks/>
public void GetCollationByServiceIdAsync(int serviceId) {
this.GetCollationByServiceIdAsync(serviceId, null);
}
/// <remarks/>
public void GetCollationByServiceIdAsync(int serviceId, object userState) {
if ((this.GetCollationByServiceIdOperationCompleted == null)) {
this.GetCollationByServiceIdOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetCollationByServiceIdOperationCompleted);
}
this.InvokeAsync("GetCollationByServiceId", new object[] {
serviceId}, this.GetCollationByServiceIdOperationCompleted, userState);
}
private void OnGetCollationByServiceIdOperationCompleted(object arg) {
if ((this.GetCollationByServiceIdCompleted != null)) {
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.GetCollationByServiceIdCompleted(this, new GetCollationByServiceIdCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetCurrency", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public CurrencyArrayResultObject GetCurrency(int packageId) {
@ -289,6 +341,47 @@ namespace WebsitePanel.EnterpriseServer {
}
}
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetCurrencyByServiceId", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public CurrencyArrayResultObject GetCurrencyByServiceId(int serviceId) {
object[] results = this.Invoke("GetCurrencyByServiceId", new object[] {
serviceId});
return ((CurrencyArrayResultObject)(results[0]));
}
/// <remarks/>
public System.IAsyncResult BeginGetCurrencyByServiceId(int serviceId, System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("GetCurrencyByServiceId", new object[] {
serviceId}, callback, asyncState);
}
/// <remarks/>
public CurrencyArrayResultObject EndGetCurrencyByServiceId(System.IAsyncResult asyncResult) {
object[] results = this.EndInvoke(asyncResult);
return ((CurrencyArrayResultObject)(results[0]));
}
/// <remarks/>
public void GetCurrencyByServiceIdAsync(int serviceId) {
this.GetCurrencyByServiceIdAsync(serviceId, null);
}
/// <remarks/>
public void GetCurrencyByServiceIdAsync(int serviceId, object userState) {
if ((this.GetCurrencyByServiceIdOperationCompleted == null)) {
this.GetCurrencyByServiceIdOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetCurrencyByServiceIdOperationCompleted);
}
this.InvokeAsync("GetCurrencyByServiceId", new object[] {
serviceId}, this.GetCurrencyByServiceIdOperationCompleted, userState);
}
private void OnGetCurrencyByServiceIdOperationCompleted(object arg) {
if ((this.GetCurrencyByServiceIdCompleted != null)) {
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.GetCurrencyByServiceIdCompleted(this, new GetCurrencyByServiceIdCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/DeleteCRMOrganization", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public ResultObject DeleteCRMOrganization(int organizationId) {
@ -909,6 +1002,89 @@ namespace WebsitePanel.EnterpriseServer {
}
}
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetInstalledLanguagePacks", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public int[] GetInstalledLanguagePacks(int packageId) {
object[] results = this.Invoke("GetInstalledLanguagePacks", new object[] {
packageId});
return ((int[])(results[0]));
}
/// <remarks/>
public System.IAsyncResult BeginGetInstalledLanguagePacks(int packageId, System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("GetInstalledLanguagePacks", new object[] {
packageId}, callback, asyncState);
}
/// <remarks/>
public int[] EndGetInstalledLanguagePacks(System.IAsyncResult asyncResult) {
object[] results = this.EndInvoke(asyncResult);
return ((int[])(results[0]));
}
/// <remarks/>
public void GetInstalledLanguagePacksAsync(int packageId) {
this.GetInstalledLanguagePacksAsync(packageId, null);
}
/// <remarks/>
public void GetInstalledLanguagePacksAsync(int packageId, object userState) {
if ((this.GetInstalledLanguagePacksOperationCompleted == null)) {
this.GetInstalledLanguagePacksOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetInstalledLanguagePacksOperationCompleted);
}
this.InvokeAsync("GetInstalledLanguagePacks", new object[] {
packageId}, this.GetInstalledLanguagePacksOperationCompleted, userState);
}
private void OnGetInstalledLanguagePacksOperationCompleted(object arg) {
if ((this.GetInstalledLanguagePacksCompleted != null)) {
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.GetInstalledLanguagePacksCompleted(this, new GetInstalledLanguagePacksCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetInstalledLanguagePacksByServiceId" +
"", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public int[] GetInstalledLanguagePacksByServiceId(int serviceId) {
object[] results = this.Invoke("GetInstalledLanguagePacksByServiceId", new object[] {
serviceId});
return ((int[])(results[0]));
}
/// <remarks/>
public System.IAsyncResult BeginGetInstalledLanguagePacksByServiceId(int serviceId, System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("GetInstalledLanguagePacksByServiceId", new object[] {
serviceId}, callback, asyncState);
}
/// <remarks/>
public int[] EndGetInstalledLanguagePacksByServiceId(System.IAsyncResult asyncResult) {
object[] results = this.EndInvoke(asyncResult);
return ((int[])(results[0]));
}
/// <remarks/>
public void GetInstalledLanguagePacksByServiceIdAsync(int serviceId) {
this.GetInstalledLanguagePacksByServiceIdAsync(serviceId, null);
}
/// <remarks/>
public void GetInstalledLanguagePacksByServiceIdAsync(int serviceId, object userState) {
if ((this.GetInstalledLanguagePacksByServiceIdOperationCompleted == null)) {
this.GetInstalledLanguagePacksByServiceIdOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetInstalledLanguagePacksByServiceIdOperationCompleted);
}
this.InvokeAsync("GetInstalledLanguagePacksByServiceId", new object[] {
serviceId}, this.GetInstalledLanguagePacksByServiceIdOperationCompleted, userState);
}
private void OnGetInstalledLanguagePacksByServiceIdOperationCompleted(object arg) {
if ((this.GetInstalledLanguagePacksByServiceIdCompleted != null)) {
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.GetInstalledLanguagePacksByServiceIdCompleted(this, new GetInstalledLanguagePacksByServiceIdCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/>
public new void CancelAsync(object userState) {
base.CancelAsync(userState);
@ -967,6 +1143,32 @@ namespace WebsitePanel.EnterpriseServer {
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
public delegate void GetCollationByServiceIdCompletedEventHandler(object sender, GetCollationByServiceIdCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class GetCollationByServiceIdCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
private object[] results;
internal GetCollationByServiceIdCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
base(exception, cancelled, userState) {
this.results = results;
}
/// <remarks/>
public StringArrayResultObject Result {
get {
this.RaiseExceptionIfNecessary();
return ((StringArrayResultObject)(this.results[0]));
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
public delegate void GetCurrencyCompletedEventHandler(object sender, GetCurrencyCompletedEventArgs e);
@ -993,6 +1195,32 @@ namespace WebsitePanel.EnterpriseServer {
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
public delegate void GetCurrencyByServiceIdCompletedEventHandler(object sender, GetCurrencyByServiceIdCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class GetCurrencyByServiceIdCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
private object[] results;
internal GetCurrencyByServiceIdCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
base(exception, cancelled, userState) {
this.results = results;
}
/// <remarks/>
public CurrencyArrayResultObject Result {
get {
this.RaiseExceptionIfNecessary();
return ((CurrencyArrayResultObject)(this.results[0]));
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
public delegate void DeleteCRMOrganizationCompletedEventHandler(object sender, DeleteCRMOrganizationCompletedEventArgs e);
@ -1330,4 +1558,56 @@ namespace WebsitePanel.EnterpriseServer {
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
public delegate void GetInstalledLanguagePacksCompletedEventHandler(object sender, GetInstalledLanguagePacksCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class GetInstalledLanguagePacksCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
private object[] results;
internal GetInstalledLanguagePacksCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
base(exception, cancelled, userState) {
this.results = results;
}
/// <remarks/>
public int[] Result {
get {
this.RaiseExceptionIfNecessary();
return ((int[])(this.results[0]));
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
public delegate void GetInstalledLanguagePacksByServiceIdCompletedEventHandler(object sender, GetInstalledLanguagePacksByServiceIdCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class GetInstalledLanguagePacksByServiceIdCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
private object[] results;
internal GetInstalledLanguagePacksByServiceIdCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
base(exception, cancelled, userState) {
this.results = results;
}
/// <remarks/>
public int[] Result {
get {
this.RaiseExceptionIfNecessary();
return ((int[])(this.results[0]));
}
}
}
}

View file

@ -50,7 +50,18 @@ namespace WebsitePanel.EnterpriseServer
private static int GetCRMServiceId(int packageId)
{
int serviceId = PackageController.GetPackageServiceId(packageId, ResourceGroups.HostedCRM);
int serviceId = PackageController.GetPackageServiceId(packageId, ResourceGroups.HostedCRM2013);
if (serviceId == 0)
serviceId = PackageController.GetPackageServiceId(packageId, ResourceGroups.HostedCRM);
return serviceId;
}
private static int GetCRMServiceId(int packageId, ResultObject res)
{
int serviceId = GetCRMServiceId(packageId);
if (serviceId == 0)
CompleteTask(res, CrmErrorCodes.CRM_IS_NOT_SELECTED_IN_HOSTING_PLAN, null,
"CRM is not selected in hosting plan.");
return serviceId;
}
@ -226,7 +237,7 @@ namespace WebsitePanel.EnterpriseServer
return value;
}
public static OrganizationResult CreateOrganization(int organizationId, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string regionName, int userId, string collation)
public static OrganizationResult CreateOrganization(int organizationId, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string regionName, int userId, string collation, int baseLanguageCode)
{
OrganizationResult res = StartTask<OrganizationResult>("CRM", "CREATE_ORGANIZATION");
@ -269,7 +280,12 @@ namespace WebsitePanel.EnterpriseServer
string rootOU = GetProviderProperty(serviceid, "rootou");
PackageContext cntx = PackageController.GetPackageContext(org.PackageId);
long maxDBSize = cntx.Quotas[Quotas.CRM_MAXDATABASESIZE].QuotaAllocatedValue;
string maxDBSizeQuotaName = "";
if (cntx.Groups.ContainsKey(ResourceGroups.HostedCRM2013)) maxDBSizeQuotaName = Quotas.CRM2013_MAXDATABASESIZE;
else if (cntx.Groups.ContainsKey(ResourceGroups.HostedCRM)) maxDBSizeQuotaName = Quotas.CRM_MAXDATABASESIZE;
long maxDBSize = cntx.Quotas[maxDBSizeQuotaName].QuotaAllocatedValue;
if (maxDBSize != -1) maxDBSize = maxDBSize * 1024 * 1024;
org.CrmAdministratorId = user.AccountId;
@ -277,10 +293,12 @@ namespace WebsitePanel.EnterpriseServer
string.Join("|", new[] {baseCurrencyCode, baseCurrencyName, baseCurrencySymbol, regionName});
org.CrmCollation = collation;
org.CrmOrgState = (int) CrmOrganizationState.Enabled;
org.CrmLanguadgeCode = baseLanguageCode.ToString();
org.CrmOrganizationId = orgId;
OrganizationResult serverRes =
crm.CreateOrganization(orgId, org.OrganizationId, org.Name,
baseLanguageCode,
org.OrganizationId + "." + rootOU,
baseCurrencyCode, baseCurrencyName,
baseCurrencySymbol, user.SamAccountName, user.FirstName, user.LastName, user.PrimaryEmailAddress,
@ -343,19 +361,35 @@ namespace WebsitePanel.EnterpriseServer
return res;
}
public static StringArrayResultObject GetCollationNames(int packageId)
public static StringArrayResultObject GetCollationByServiceId(int serviceId)
{
StringArrayResultObject ret = StartTask<StringArrayResultObject>("CRM", "GET_COLLATION_NAMES");
ret.IsSuccess = true;
try
{
CRM crm = new CRM();
ServiceProviderProxy.Init(crm, serviceId);
ret.Value = crm.GetSupportedCollationNames();
}
catch (Exception ex)
{
CompleteTask(ret, CrmErrorCodes.CANNOT_GET_COLLATION_NAMES, ex);
return ret;
}
CompleteTask();
return ret;
}
public static StringArrayResultObject GetCollation(int packageId)
{
StringArrayResultObject ret = StartTask<StringArrayResultObject>("CRM", "GET_COLLATION_NAMES");
ret.IsSuccess = true;
try
{
int serviceId = PackageController.GetPackageServiceId(packageId, ResourceGroups.HostedCRM);
int serviceId = GetCRMServiceId(packageId, ret);
if (serviceId == 0)
{
CompleteTask(ret, CrmErrorCodes.CRM_IS_NOT_SELECTED_IN_HOSTING_PLAN);
return ret;
}
CRM crm = new CRM();
ServiceProviderProxy.Init(crm, serviceId);
@ -372,18 +406,35 @@ namespace WebsitePanel.EnterpriseServer
return ret;
}
public static CurrencyArrayResultObject GetCurrencyByServiceId(int serviceId)
{
CurrencyArrayResultObject ret = StartTask<CurrencyArrayResultObject>("CRM", "GET_CURRENCY");
ret.IsSuccess = true;
try
{
CRM crm = new CRM();
ServiceProviderProxy.Init(crm, serviceId);
ret.Value = crm.GetCurrencyList();
}
catch (Exception ex)
{
CompleteTask(ret, CrmErrorCodes.CANNOT_GET_CURRENCY_LIST, ex);
return ret;
}
CompleteTask();
return ret;
}
public static CurrencyArrayResultObject GetCurrency(int packageId)
{
CurrencyArrayResultObject ret = StartTask<CurrencyArrayResultObject>("CRM", "GET_CURRENCY");
ret.IsSuccess = true;
try
{
int serviceId = PackageController.GetPackageServiceId(packageId, ResourceGroups.HostedCRM);
int serviceId = GetCRMServiceId(packageId, ret);
if (serviceId == 0)
{
CompleteTask(ret, CrmErrorCodes.CRM_IS_NOT_SELECTED_IN_HOSTING_PLAN, null, "CRM is not selected in hosting plan.");
return ret;
}
CRM crm = new CRM();
ServiceProviderProxy.Init(crm, serviceId);
@ -550,9 +601,12 @@ namespace WebsitePanel.EnterpriseServer
PackageContext cntx = PackageController.GetPackageContext(packageId);
return (cntx.Quotas[Quotas.CRM_ORGANIZATION] != null && !cntx.Quotas[Quotas.CRM_ORGANIZATION].QuotaExhausted);
string quotaName = "";
if (cntx.Groups.ContainsKey(ResourceGroups.HostedCRM2013)) quotaName = Quotas.CRM2013_ORGANIZATION;
else if (cntx.Groups.ContainsKey(ResourceGroups.HostedCRM)) quotaName = Quotas.CRM_ORGANIZATION;
return (cntx.Quotas[quotaName] != null && !cntx.Quotas[quotaName].QuotaExhausted);
}
catch(Exception ex)
@ -676,19 +730,22 @@ namespace WebsitePanel.EnterpriseServer
if (!quotaRes.Value)
{
CompleteTask(ret, CrmErrorCodes.USER_QUOTA_HAS_BEEN_REACHED + CALType.ToString(), null, "CRM user quota has been reached.");
string errorCode = CrmErrorCodes.USER_QUOTA_HAS_BEEN_REACHED;
PackageContext cntx = PackageController.GetPackageContext(packageId);
if (cntx.Groups.ContainsKey(ResourceGroups.HostedCRM2013))
errorCode += "2013_";
errorCode += CALType.ToString();
CompleteTask(ret, errorCode , null, "CRM user quota has been reached.");
return ret;
}
Guid crmId;
try
{
int serviceId = PackageController.GetPackageServiceId(packageId, ResourceGroups.HostedCRM);
int serviceId = GetCRMServiceId(packageId, ret);
if (serviceId == 0)
{
CompleteTask(ret, CrmErrorCodes.CRM_IS_NOT_SELECTED_IN_HOSTING_PLAN, null, "CRM is not selected in hosting plan.");
return ret;
}
Organization org = OrganizationController.GetOrganization(itemId);
@ -735,12 +792,9 @@ namespace WebsitePanel.EnterpriseServer
CRMBusinessUnitsResult res = StartTask<CRMBusinessUnitsResult>("CRM", "GET_CRM_BUSINESS_UNITS");
try
{
int serviceId = PackageController.GetPackageServiceId(packageId, ResourceGroups.HostedCRM);
int serviceId = GetCRMServiceId(packageId, res);
if (serviceId == 0)
{
CompleteTask(res, CrmErrorCodes.CRM_IS_NOT_SELECTED_IN_HOSTING_PLAN, null, "CRM is not selected in hosting plan.");
return res;
}
Organization org;
try
@ -784,12 +838,9 @@ namespace WebsitePanel.EnterpriseServer
try
{
int serviceId = PackageController.GetPackageServiceId(packageId, ResourceGroups.HostedCRM);
int serviceId = GetCRMServiceId(packageId, res);
if (serviceId == 0)
{
CompleteTask(res, CrmErrorCodes.CRM_IS_NOT_SELECTED_IN_HOSTING_PLAN, null, "CRM is not selected in hosting plan.");
return res;
}
CRM crm = new CRM();
ServiceProviderProxy.Init(crm, serviceId);
@ -874,13 +925,9 @@ namespace WebsitePanel.EnterpriseServer
}
int serviceId = PackageController.GetPackageServiceId(org.PackageId, ResourceGroups.HostedCRM);
int serviceId = GetCRMServiceId(org.PackageId, res);
if (serviceId == 0)
{
CompleteTask(res, CrmErrorCodes.CRM_IS_NOT_SELECTED_IN_HOSTING_PLAN, null,
"CRM is not selected in hosting plan.");
return res;
}
try
{
@ -919,13 +966,9 @@ namespace WebsitePanel.EnterpriseServer
try
{
int serviceId = PackageController.GetPackageServiceId(packageId, ResourceGroups.HostedCRM);
int serviceId = GetCRMServiceId(packageId, res);
if (serviceId == 0)
{
CompleteTask(res, CrmErrorCodes.CRM_IS_NOT_SELECTED_IN_HOSTING_PLAN, null,
"CRM is not selected in hosting plan.");
return res;
}
CRM crm = new CRM();
ServiceProviderProxy.Init(crm, serviceId);
@ -978,13 +1021,9 @@ namespace WebsitePanel.EnterpriseServer
return res;
}
int serviceId = PackageController.GetPackageServiceId(packageId, ResourceGroups.HostedCRM);
int serviceId = GetCRMServiceId(packageId, res);
if (serviceId == 0)
{
CompleteTask(res, CrmErrorCodes.CRM_IS_NOT_SELECTED_IN_HOSTING_PLAN, null,
"CRM is not selected in hosting plan.");
return res;
}
CRM crm = new CRM();
ServiceProviderProxy.Init(crm, serviceId);
@ -1012,7 +1051,13 @@ namespace WebsitePanel.EnterpriseServer
}
if (!quotaRes.Value)
{
CompleteTask(res, CrmErrorCodes.USER_QUOTA_HAS_BEEN_REACHED + CALType.ToString(), null, "CRM user quota has been reached.");
string errorCode = CrmErrorCodes.USER_QUOTA_HAS_BEEN_REACHED;
PackageContext cntx = PackageController.GetPackageContext(packageId);
if (cntx.Groups.ContainsKey(ResourceGroups.HostedCRM2013))
errorCode += "2013_";
errorCode += CALType.ToString();
CompleteTask(res, errorCode, null, "CRM user quota has been reached.");
return res;
}
@ -1058,13 +1103,9 @@ namespace WebsitePanel.EnterpriseServer
return res;
}
int serviceId = PackageController.GetPackageServiceId(org.PackageId, ResourceGroups.HostedCRM);
int serviceId = GetCRMServiceId(org.PackageId, res);
if (serviceId == 0)
{
CompleteTask(res, CrmErrorCodes.CRM_IS_NOT_SELECTED_IN_HOSTING_PLAN, null,
"CRM is not selected in hosting plan.");
return res;
}
CRM crm = new CRM();
ServiceProviderProxy.Init(crm, serviceId);
@ -1105,20 +1146,38 @@ namespace WebsitePanel.EnterpriseServer
return res;
}
string quotaName = Quotas.CRM_USERS;
string quotaName = "";
if (cntx.Groups.ContainsKey(ResourceGroups.HostedCRM2013))
{
switch (CALType)
{
case 0:
case CRMUserLycenseTypes.PROFESSIONAL:
quotaName = Quotas.CRM2013_PROFESSIONALUSERS;
break;
case CRMUserLycenseTypes.BASIC:
quotaName = Quotas.CRM2013_BASICUSERS;
break;
case CRMUserLycenseTypes.ESSENTIAL:
quotaName = Quotas.CRM2013_ESSENTIALUSERS;
break;
}
}
else if (cntx.Groups.ContainsKey(ResourceGroups.HostedCRM))
{
switch (CALType)
{
case CRMUserLycenseTypes.FULL:
quotaName = Quotas.CRM_USERS;
break;
case 2:
case CRMUserLycenseTypes.LIMITED:
quotaName = Quotas.CRM_LIMITEDUSERS;
break;
case 22:
case CRMUserLycenseTypes.ESS:
quotaName = Quotas.CRM_ESSUSERS;
break;
}
}
int allocatedCrmUsers = cntx.Quotas[quotaName].QuotaAllocatedValue;
res.Value = allocatedCrmUsers == -1 || allocatedCrmUsers > tmp.Value;
@ -1137,18 +1196,14 @@ namespace WebsitePanel.EnterpriseServer
public static ResultObject SetMaxDBSize(int itemId, int packageId, long maxSize)
{
ResultObject res = StartTask<CrmRolesResult>("CRM", "SET_CRM_MAXDBSIZE");
ResultObject res = StartTask<ResultObject>("CRM", "SET_CRM_MAXDBSIZE");
try
{
int serviceId = PackageController.GetPackageServiceId(packageId, ResourceGroups.HostedCRM);
int serviceId = GetCRMServiceId(packageId, res);
if (serviceId == 0)
{
CompleteTask(res, CrmErrorCodes.CRM_IS_NOT_SELECTED_IN_HOSTING_PLAN, null,
"CRM is not selected in hosting plan.");
return res;
}
CRM crm = new CRM();
ServiceProviderProxy.Init(crm, serviceId);
@ -1169,7 +1224,11 @@ namespace WebsitePanel.EnterpriseServer
PackageContext cntx = PackageController.GetPackageContext(packageId);
long limitSize = cntx.Quotas[Quotas.CRM_MAXDATABASESIZE].QuotaAllocatedValue;
string quotaName = "";
if (cntx.Groups.ContainsKey(ResourceGroups.HostedCRM2013)) quotaName = Quotas.CRM2013_MAXDATABASESIZE;
else if (cntx.Groups.ContainsKey(ResourceGroups.HostedCRM)) quotaName = Quotas.CRM_MAXDATABASESIZE;
long limitSize = cntx.Quotas[quotaName].QuotaAllocatedValue;
if (limitSize != -1)
{
@ -1199,19 +1258,15 @@ namespace WebsitePanel.EnterpriseServer
public static long GetDBSize(int itemId, int packageId)
{
ResultObject res = StartTask<CrmRolesResult>("CRM", "GET_CRM_DBSIZE");
ResultObject res = StartTask<ResultObject>("CRM", "GET_CRM_DBSIZE");
long size = -1;
try
{
int serviceId = PackageController.GetPackageServiceId(packageId, ResourceGroups.HostedCRM);
int serviceId = GetCRMServiceId(packageId, res);
if (serviceId == 0)
{
CompleteTask(res, CrmErrorCodes.CRM_IS_NOT_SELECTED_IN_HOSTING_PLAN, null,
"CRM is not selected in hosting plan.");
return -1;
}
CRM crm = new CRM();
ServiceProviderProxy.Init(crm, serviceId);
@ -1244,19 +1299,15 @@ namespace WebsitePanel.EnterpriseServer
public static long GetMaxDBSize(int itemId, int packageId)
{
ResultObject res = StartTask<CrmRolesResult>("CRM", "GET_CRM_MAXDBSIZE");
ResultObject res = StartTask<ResultObject>("CRM", "GET_CRM_MAXDBSIZE");
long size = -1;
try
{
int serviceId = PackageController.GetPackageServiceId(packageId, ResourceGroups.HostedCRM);
int serviceId = GetCRMServiceId(packageId, res);
if (serviceId == 0)
{
CompleteTask(res, CrmErrorCodes.CRM_IS_NOT_SELECTED_IN_HOSTING_PLAN, null,
"CRM is not selected in hosting plan.");
return -1;
}
CRM crm = new CRM();
ServiceProviderProxy.Init(crm, serviceId);
@ -1287,5 +1338,52 @@ namespace WebsitePanel.EnterpriseServer
return size;
}
public static int[] GetInstalledLanguagePacks(int packageId)
{
ResultObject res = StartTask<ResultObject>("CRM", "GET_CRM_MAXDBSIZE");
int[] ret = null;
try
{
int serviceId = GetCRMServiceId(packageId, res);
if (serviceId == 0)
return null;
CRM crm = new CRM();
ServiceProviderProxy.Init(crm, serviceId);
ret = crm.GetInstalledLanguagePacks();
}
catch (Exception ex)
{
CompleteTask(res, CrmErrorCodes.CANNOT_CONFIGURE_CRM_ORGANIZATION, ex);
return null;
}
CompleteTask();
return ret;
}
public static int[] GetInstalledLanguagePacksByServiceId(int serviceId)
{
ResultObject res = StartTask<ResultObject>("CRM", "GET_CRM_MAXDBSIZE");
int[] ret = null;
try
{
CRM crm = new CRM();
ServiceProviderProxy.Init(crm, serviceId);
ret = crm.GetInstalledLanguagePacks();
}
catch (Exception ex)
{
CompleteTask(res, CrmErrorCodes.CANNOT_CONFIGURE_CRM_ORGANIZATION, ex);
return null;
}
CompleteTask();
return ret;
}
}
}

View file

@ -932,12 +932,20 @@ namespace WebsitePanel.EnterpriseServer
if (cntxTmp.Groups.ContainsKey(ResourceGroups.HostedCRM))
{
stats.CreatedCRMUsers = CRMController.GetCRMUsersCount(org.Id, string.Empty, string.Empty, 0).Value;
stats.CreatedLimitedCRMUsers = CRMController.GetCRMUsersCount(org.Id, string.Empty, string.Empty, 2).Value;
stats.CreatedESSCRMUsers = CRMController.GetCRMUsersCount(org.Id, string.Empty, string.Empty, 22).Value;
stats.CreatedCRMUsers = CRMController.GetCRMUsersCount(org.Id, string.Empty, string.Empty, CRMUserLycenseTypes.FULL).Value;
stats.CreatedLimitedCRMUsers = CRMController.GetCRMUsersCount(org.Id, string.Empty, string.Empty, CRMUserLycenseTypes.LIMITED).Value;
stats.CreatedESSCRMUsers = CRMController.GetCRMUsersCount(org.Id, string.Empty, string.Empty, CRMUserLycenseTypes.ESS).Value;
stats.UsedCRMDiskSpace = CRMController.GetDBSize(org.Id, org.PackageId);
stats.AllocatedCRMDiskSpace = CRMController.GetMaxDBSize(org.Id, org.PackageId);
}
if (cntxTmp.Groups.ContainsKey(ResourceGroups.HostedCRM2013))
{
stats.CreatedProfessionalCRMUsers = CRMController.GetCRMUsersCount(org.Id, string.Empty, string.Empty, CRMUserLycenseTypes.PROFESSIONAL).Value;
stats.CreatedBasicCRMUsers = CRMController.GetCRMUsersCount(org.Id, string.Empty, string.Empty, CRMUserLycenseTypes.BASIC).Value;
stats.CreatedEssentialCRMUsers = CRMController.GetCRMUsersCount(org.Id, string.Empty, string.Empty, CRMUserLycenseTypes.ESSENTIAL).Value;
stats.UsedCRMDiskSpace = CRMController.GetDBSize(org.Id, org.PackageId);
stats.AllocatedCRMDiskSpace = CRMController.GetMaxDBSize(org.Id, org.PackageId);
}
if (cntxTmp.Groups.ContainsKey(ResourceGroups.BlackBerry))
@ -996,9 +1004,18 @@ namespace WebsitePanel.EnterpriseServer
if (cntxTmp.Groups.ContainsKey(ResourceGroups.HostedCRM))
{
stats.CreatedCRMUsers += CRMController.GetCRMUsersCount(o.Id, string.Empty, string.Empty, 0 ).Value;
stats.CreatedLimitedCRMUsers += CRMController.GetCRMUsersCount(o.Id, string.Empty, string.Empty, 2).Value;
stats.CreatedESSCRMUsers += CRMController.GetCRMUsersCount(o.Id, string.Empty, string.Empty, 22).Value;
stats.CreatedCRMUsers += CRMController.GetCRMUsersCount(o.Id, string.Empty, string.Empty, CRMUserLycenseTypes.FULL ).Value;
stats.CreatedLimitedCRMUsers += CRMController.GetCRMUsersCount(o.Id, string.Empty, string.Empty, CRMUserLycenseTypes.LIMITED).Value;
stats.CreatedESSCRMUsers += CRMController.GetCRMUsersCount(o.Id, string.Empty, string.Empty, CRMUserLycenseTypes.ESS).Value;
stats.UsedCRMDiskSpace += CRMController.GetDBSize(o.Id, o.PackageId);
stats.AllocatedCRMDiskSpace += CRMController.GetMaxDBSize(o.Id, o.PackageId);
}
if (cntxTmp.Groups.ContainsKey(ResourceGroups.HostedCRM2013))
{
stats.CreatedProfessionalCRMUsers += CRMController.GetCRMUsersCount(o.Id, string.Empty, string.Empty, CRMUserLycenseTypes.PROFESSIONAL).Value;
stats.CreatedBasicCRMUsers += CRMController.GetCRMUsersCount(o.Id, string.Empty, string.Empty, CRMUserLycenseTypes.BASIC).Value;
stats.CreatedEssentialCRMUsers += CRMController.GetCRMUsersCount(o.Id, string.Empty, string.Empty, CRMUserLycenseTypes.ESSENTIAL).Value;
stats.UsedCRMDiskSpace += CRMController.GetDBSize(o.Id, o.PackageId);
stats.AllocatedCRMDiskSpace += CRMController.GetMaxDBSize(o.Id, o.PackageId);
}
@ -1049,6 +1066,13 @@ namespace WebsitePanel.EnterpriseServer
stats.AllocatedESSCRMUsers = cntx.Quotas[Quotas.CRM_ESSUSERS].QuotaAllocatedValue;
}
if (cntx.Groups.ContainsKey(ResourceGroups.HostedCRM2013))
{
stats.AllocatedProfessionalCRMUsers = cntx.Quotas[Quotas.CRM2013_PROFESSIONALUSERS].QuotaAllocatedValue;
stats.AllocatedBasicCRMUsers = cntx.Quotas[Quotas.CRM2013_BASICUSERS].QuotaAllocatedValue;
stats.AllocatedEssentialCRMUsers = cntx.Quotas[Quotas.CRM2013_ESSENTIALUSERS].QuotaAllocatedValue;
}
if (cntx.Groups.ContainsKey(ResourceGroups.BlackBerry))
{
stats.AllocatedBlackBerryUsers = cntx.Quotas[Quotas.BLACKBERRY_USERS].QuotaAllocatedValue;

View file

@ -48,25 +48,35 @@ namespace WebsitePanel.EnterpriseServer
{
[WebMethod]
public OrganizationResult CreateOrganization(int organizationId, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string regionName, int userId, string collation)
public OrganizationResult CreateOrganization(int organizationId, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string regionName, int userId, string collation, int baseLanguageCode)
{
return CRMController.CreateOrganization(organizationId, baseCurrencyCode, baseCurrencyName, baseCurrencySymbol, regionName, userId, collation);
return CRMController.CreateOrganization(organizationId, baseCurrencyCode, baseCurrencyName, baseCurrencySymbol, regionName, userId, collation, baseLanguageCode);
}
[WebMethod]
public StringArrayResultObject GetCollation(int packageId)
{
return CRMController.GetCollationNames(packageId);
return CRMController.GetCollation(packageId);
}
[WebMethod]
public StringArrayResultObject GetCollationByServiceId(int serviceId)
{
return CRMController.GetCollationByServiceId(serviceId);
}
[WebMethod]
public CurrencyArrayResultObject GetCurrency(int packageId)
{
return CRMController.GetCurrency(packageId);
}
[WebMethod]
public CurrencyArrayResultObject GetCurrencyByServiceId(int serviceId)
{
return CRMController.GetCurrencyByServiceId(serviceId);
}
[WebMethod]
public ResultObject DeleteCRMOrganization(int organizationId)
{
@ -149,5 +159,17 @@ namespace WebsitePanel.EnterpriseServer
return CRMController.GetMaxDBSize(itemId, packageId);
}
[WebMethod]
public int[] GetInstalledLanguagePacks(int packageId)
{
return CRMController.GetInstalledLanguagePacks(packageId);
}
[WebMethod]
public int[] GetInstalledLanguagePacksByServiceId(int serviceId)
{
return CRMController.GetInstalledLanguagePacksByServiceId(serviceId);
}
}
}

View file

@ -74,6 +74,11 @@ namespace WebsitePanel.Providers.Common
public const string UsersHome = "UsersHome";
public const string Collation = "Collation";
public const string Currency = "Currency";
public const string BaseLanguage = "BaseLanguage";
}
}

View file

@ -35,6 +35,7 @@ namespace WebsitePanel.Providers.HostedSolution
public interface ICRM
{
OrganizationResult CreateOrganization(Guid organizationId, string organizationUniqueName, string organizationFriendlyName,
int baseLanguageCode,
string ou,
string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol,
string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail,
@ -45,6 +46,8 @@ namespace WebsitePanel.Providers.HostedSolution
Currency[] GetCurrencyList();
int[] GetInstalledLanguagePacks();
ResultObject DeleteOrganization(Guid orgId);
UserResult CreateCRMUser(OrganizationUser user, string orgName, Guid organizationId, Guid baseUnitId, int CALType);

View file

@ -76,6 +76,52 @@ namespace WebsitePanel.Providers.HostedSolution
private int allocatedEnterpriseStorageSpace;
private int usedEnterpriseStorageSpace;
private int createdProfessionalCRMUsers;
private int allocatedProfessionalCRMUsers;
public int CreatedProfessionalCRMUsers
{
get { return createdProfessionalCRMUsers; }
set { createdProfessionalCRMUsers = value; }
}
public int AllocatedProfessionalCRMUsers
{
get { return allocatedProfessionalCRMUsers; }
set { allocatedProfessionalCRMUsers = value; }
}
private int createdBasicCRMUsers;
private int allocatedBasicCRMUsers;
public int CreatedBasicCRMUsers
{
get { return createdBasicCRMUsers; }
set { createdBasicCRMUsers = value; }
}
public int AllocatedBasicCRMUsers
{
get { return allocatedBasicCRMUsers; }
set { allocatedBasicCRMUsers = value; }
}
private int createdEssentialCRMUsers;
private int allocatedEssentialCRMUsers;
public int CreatedEssentialCRMUsers
{
get { return createdEssentialCRMUsers; }
set { createdEssentialCRMUsers = value; }
}
public int AllocatedEssentialCRMUsers
{
get { return allocatedEssentialCRMUsers; }
set { allocatedEssentialCRMUsers = value; }
}
public int CreatedCRMUsers
{

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,152 @@
// Copyright (c) 2012, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using WebsitePanel.Providers.Common;
using WebsitePanel.Server.Utils;
using System.Text;
using System.Management.Automation.Runspaces;
namespace WebsitePanel.Providers.HostedSolution
{
public class HostedSolutionLog
{
public static string LogPrefix = "HostedSolution";
public static void LogStart(string message, params object[] args)
{
string text = String.Format(message, args);
Log.WriteStart("{0} {1}", LogPrefix, text);
}
public static void LogEnd(string message, params object[] args)
{
string text = String.Format(message, args);
Log.WriteEnd("{0} {1}", LogPrefix, text);
}
public static void LogInfo(string message)
{
Log.WriteInfo("{0} {1}", LogPrefix, message);
}
public static void LogInfo(string message, params object[] args)
{
string text = String.Format(message, args);
Log.WriteInfo("{0} {1}", LogPrefix, text);
}
public static void LogWarning(string message)
{
Log.WriteWarning("{0} {1}", LogPrefix, message);
}
public static void LogWarning(string message, params object[] args)
{
string text = String.Format(message, args);
Log.WriteWarning("{0} {1}", LogPrefix, text);
}
public static void LogError(Exception ex)
{
Log.WriteError(LogPrefix, ex);
}
public static void LogError(string message, Exception ex)
{
string text = String.Format("{0} {1}", LogPrefix, message);
Log.WriteError(text, ex);
}
public static void DebugInfo(string message, params object[] args)
{
string text = String.Format(message, args);
Log.WriteInfo("{0} {1}", LogPrefix, text);
}
public static void EndLog(string message, ResultObject res, string errorCode, Exception ex)
{
if (res != null)
{
res.IsSuccess = false;
if (!string.IsNullOrEmpty(errorCode))
res.ErrorCodes.Add(errorCode);
}
if (ex != null)
LogError(ex);
//LogRecord.
LogEnd(message);
}
public static void EndLog(string message, ResultObject res, string errorCode)
{
EndLog(message, res, errorCode, null);
}
public static void EndLog(string message, ResultObject res)
{
EndLog(message, res, null);
}
public static void EndLog(string message)
{
EndLog(message, null);
}
internal static T StartLog<T>(string message) where T : ResultObject, new()
{
LogStart(message);
T res = new T();
res.IsSuccess = true;
return res;
}
public static void DebugCommand(Command cmd)
{
StringBuilder sb = new StringBuilder(cmd.CommandText);
foreach (CommandParameter parameter in cmd.Parameters)
{
string formatString = " -{0} {1}";
if (parameter.Value is string)
formatString = " -{0} '{1}'";
else if (parameter.Value is bool)
formatString = " -{0} ${1}";
sb.AppendFormat(formatString, parameter.Name, parameter.Value);
}
Log.WriteInfo("{0} {1}", LogPrefix, sb.ToString());
}
}
}

View file

@ -31,40 +31,44 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="microsoft.crm.sdk.proxy">
<HintPath>..\..\Lib\References\Microsoft\microsoft.crm.sdk.proxy.dll</HintPath>
<Private>True</Private>
<Reference Include="microsoft.crm.sdk.proxy, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Lib\References\Microsoft\CRM2011\microsoft.crm.sdk.proxy.dll</HintPath>
</Reference>
<Reference Include="microsoft.xrm.client">
<HintPath>..\..\Lib\References\Microsoft\microsoft.xrm.client.dll</HintPath>
<Private>True</Private>
<Reference Include="microsoft.xrm.client, Version=5.0.9689.1985, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Lib\References\Microsoft\CRM2011\microsoft.xrm.client.dll</HintPath>
</Reference>
<Reference Include="microsoft.xrm.client.codegeneration">
<HintPath>..\..\Lib\References\Microsoft\microsoft.xrm.client.codegeneration.dll</HintPath>
<Private>True</Private>
<Reference Include="microsoft.xrm.client.codegeneration, Version=5.0.9689.1985, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Lib\References\Microsoft\CRM2011\microsoft.xrm.client.codegeneration.dll</HintPath>
</Reference>
<Reference Include="microsoft.xrm.portal">
<HintPath>..\..\Lib\References\Microsoft\microsoft.xrm.portal.dll</HintPath>
<Private>True</Private>
<Reference Include="microsoft.xrm.portal, Version=5.0.9689.1985, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Lib\References\Microsoft\CRM2011\microsoft.xrm.portal.dll</HintPath>
</Reference>
<Reference Include="microsoft.xrm.portal.files">
<HintPath>..\..\Lib\References\Microsoft\microsoft.xrm.portal.files.dll</HintPath>
<Private>True</Private>
<Reference Include="microsoft.xrm.portal.files, Version=5.0.9689.1985, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Lib\References\Microsoft\CRM2011\microsoft.xrm.portal.files.dll</HintPath>
</Reference>
<Reference Include="microsoft.xrm.sdk">
<HintPath>..\..\Lib\References\Microsoft\microsoft.xrm.sdk.dll</HintPath>
<Private>True</Private>
<Reference Include="microsoft.xrm.sdk, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Lib\References\Microsoft\CRM2011\microsoft.xrm.sdk.dll</HintPath>
</Reference>
<Reference Include="microsoft.xrm.sdk.deployment">
<HintPath>..\..\Lib\References\Microsoft\microsoft.xrm.sdk.deployment.dll</HintPath>
<Private>True</Private>
<Reference Include="microsoft.xrm.sdk.deployment, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Lib\References\Microsoft\CRM2011\microsoft.xrm.sdk.deployment.dll</HintPath>
</Reference>
<Reference Include="microsoft.xrm.sdk.workflow">
<HintPath>..\..\Lib\References\Microsoft\microsoft.xrm.sdk.workflow.dll</HintPath>
<Private>True</Private>
<Reference Include="microsoft.xrm.sdk.workflow, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Lib\References\Microsoft\CRM2011\microsoft.xrm.sdk.workflow.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Lib\System.Management.Automation.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.ServiceModel" />
<Reference Include="System.Xml.Linq" />
@ -74,7 +78,9 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="CRMBase.cs" />
<Compile Include="CRMProvider2011.cs" />
<Compile Include="HostedSolutionLog.cs" />
<Compile Include="myorganizationcrmsdktypes.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
@ -84,11 +90,6 @@
<Name>WebsitePanel.Providers.Base</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\WebsitePanel.Providers.HostedSolution\WebsitePanel.Providers.HostedSolution.csproj">
<Project>{A06DE5E4-4331-47E1-8F46-7B846146B559}</Project>
<Name>WebsitePanel.Providers.HostedSolution</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\WebsitePanel.Server.Utils\WebsitePanel.Server.Utils.csproj">
<Project>{E91E52F3-9555-4D00-B577-2B1DBDD87CA7}</Project>
<Name>WebsitePanel.Server.Utils</Name>

View file

@ -9,7 +9,9 @@
//------------------------------------------------------------------------------
[assembly: Microsoft.Xrm.Sdk.Client.ProxyTypesAssemblyAttribute()]
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum AccountState
@ -20,7 +22,7 @@ public enum AccountState
[System.Runtime.Serialization.EnumMemberAttribute()]
Inactive = 1,
}*/
}
/// <summary>
/// Business that represents a customer or potential customer. The company that is billed in business transactions.
@ -4875,7 +4877,7 @@ public partial class ActivityParty : Microsoft.Xrm.Sdk.Entity, System.ComponentM
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum ActivityPointerState
@ -4892,7 +4894,7 @@ public enum ActivityPointerState
[System.Runtime.Serialization.EnumMemberAttribute()]
Scheduled = 3,
}*/
}
/// <summary>
/// Task performed, or to be performed, by a user. An activity is any action for which an entry can be made on a calendar.
@ -8070,7 +8072,7 @@ public partial class AnnualFiscalCalendar : Microsoft.Xrm.Sdk.Entity, System.Com
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum AppointmentState
@ -8087,7 +8089,7 @@ public enum AppointmentState
[System.Runtime.Serialization.EnumMemberAttribute()]
Scheduled = 3,
}*/
}
/// <summary>
/// Commitment representing a time interval with start/end times and duration.
@ -9622,7 +9624,7 @@ public partial class Appointment : Microsoft.Xrm.Sdk.Entity, System.ComponentMod
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum AsyncOperationState
@ -9639,7 +9641,7 @@ public enum AsyncOperationState
[System.Runtime.Serialization.EnumMemberAttribute()]
Completed = 3,
}*/
}
/// <summary>
/// Process whose execution can proceed independently or in the background.
@ -14691,7 +14693,7 @@ public partial class BulkDeleteFailure : Microsoft.Xrm.Sdk.Entity, System.Compon
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum BulkDeleteOperationState
@ -14708,7 +14710,7 @@ public enum BulkDeleteOperationState
[System.Runtime.Serialization.EnumMemberAttribute()]
Completed = 3,
}*/
}
/// <summary>
/// User-submitted bulk deletion job.
@ -15149,7 +15151,7 @@ public partial class BulkDeleteOperation : Microsoft.Xrm.Sdk.Entity, System.Comp
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum BulkOperationState
@ -15163,7 +15165,7 @@ public enum BulkOperationState
[System.Runtime.Serialization.EnumMemberAttribute()]
Canceled = 2,
}*/
}
/// <summary>
/// System operation used to perform lengthy and asynchronous operations on large data sets, such as distributing a campaign activity or quick campaign.
@ -21108,7 +21110,7 @@ public partial class CalendarRule : Microsoft.Xrm.Sdk.Entity, System.ComponentMo
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum CampaignState
@ -21119,7 +21121,7 @@ public enum CampaignState
[System.Runtime.Serialization.EnumMemberAttribute()]
Inactive = 1,
}*/
}
/// <summary>
/// Container for campaign activities and responses, sales literature, products, and lists to create, plan, execute, and track the results of a specific marketing campaign through its life.
@ -22556,7 +22558,7 @@ public partial class Campaign : Microsoft.Xrm.Sdk.Entity, System.ComponentModel.
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum CampaignActivityState
@ -22570,7 +22572,7 @@ public enum CampaignActivityState
[System.Runtime.Serialization.EnumMemberAttribute()]
Canceled = 2,
}*/
}
/// <summary>
/// Task performed, or to be performed, by a user for planning or running a campaign.
@ -24497,7 +24499,7 @@ public partial class CampaignItem : Microsoft.Xrm.Sdk.Entity, System.ComponentMo
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum CampaignResponseState
@ -24511,7 +24513,7 @@ public enum CampaignResponseState
[System.Runtime.Serialization.EnumMemberAttribute()]
Canceled = 2,
}*/
}
/// <summary>
/// Response from an existing or a potential new customer for a campaign.
@ -25993,7 +25995,7 @@ public partial class CampaignResponse : Microsoft.Xrm.Sdk.Entity, System.Compone
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum ColumnMappingState
@ -26001,7 +26003,7 @@ public enum ColumnMappingState
[System.Runtime.Serialization.EnumMemberAttribute()]
Active = 0,
}*/
}
/// <summary>
/// Mapping for columns in a data map.
@ -31712,7 +31714,7 @@ public partial class ConstraintBasedGroup : Microsoft.Xrm.Sdk.Entity, System.Com
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum ContactState
@ -31723,7 +31725,7 @@ public enum ContactState
[System.Runtime.Serialization.EnumMemberAttribute()]
Inactive = 1,
}*/
}
/// <summary>
/// Person with whom a business unit has a relationship, such as customer, supplier, and colleague.
@ -35945,7 +35947,7 @@ public partial class ContactQuotes : Microsoft.Xrm.Sdk.Entity, System.ComponentM
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum ContractState
@ -35968,7 +35970,7 @@ public enum ContractState
[System.Runtime.Serialization.EnumMemberAttribute()]
Expired = 5,
}*/
}
/// <summary>
/// Agreement to provide customer service during a specified amount of time or number of cases.
@ -37502,7 +37504,7 @@ public partial class Contract : Microsoft.Xrm.Sdk.Entity, System.ComponentModel.
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum ContractDetailState
@ -37519,7 +37521,7 @@ public enum ContractDetailState
[System.Runtime.Serialization.EnumMemberAttribute()]
Expired = 3,
}*/
}
/// <summary>
/// Line item in a contract that specifies the type of service a customer is entitled to.
@ -42271,7 +42273,7 @@ public partial class Discount : Microsoft.Xrm.Sdk.Entity, System.ComponentModel.
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum DiscountTypeState
@ -42282,7 +42284,7 @@ public enum DiscountTypeState
[System.Runtime.Serialization.EnumMemberAttribute()]
Inactive = 1,
}*/
}
/// <summary>
/// Type of discount specified as either a percentage or an amount.
@ -44193,7 +44195,7 @@ public partial class DuplicateRecord : Microsoft.Xrm.Sdk.Entity, System.Componen
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum DuplicateRuleState
@ -44204,7 +44206,7 @@ public enum DuplicateRuleState
[System.Runtime.Serialization.EnumMemberAttribute()]
Active = 1,
}*/
}
/// <summary>
/// Rule used to identify potential duplicates.
@ -45191,7 +45193,7 @@ public partial class DuplicateRuleCondition : Microsoft.Xrm.Sdk.Entity, System.C
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum EmailState
@ -45205,7 +45207,7 @@ public enum EmailState
[System.Runtime.Serialization.EnumMemberAttribute()]
Canceled = 2,
}*/
}
/// <summary>
/// Activity that is delivered using e-mail protocols.
@ -48145,7 +48147,7 @@ public partial class Equipment : Microsoft.Xrm.Sdk.Entity, System.ComponentModel
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum FaxState
@ -48159,7 +48161,7 @@ public enum FaxState
[System.Runtime.Serialization.EnumMemberAttribute()]
Canceled = 2,
}*/
}
/// <summary>
/// Activity that tracks call outcome and number of pages for a fax and optionally stores an electronic copy of the document.
@ -53690,7 +53692,7 @@ public partial class GoalRollupQuery : Microsoft.Xrm.Sdk.Entity, System.Componen
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum ImportState
@ -53698,7 +53700,7 @@ public enum ImportState
[System.Runtime.Serialization.EnumMemberAttribute()]
Active = 0,
}*/
}
/// <summary>
/// Status and ownership information for an import job.
@ -54589,7 +54591,7 @@ public partial class ImportEntityMapping : Microsoft.Xrm.Sdk.Entity, System.Comp
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum ImportFileState
@ -54597,7 +54599,7 @@ public enum ImportFileState
[System.Runtime.Serialization.EnumMemberAttribute()]
Active = 0,
}*/
}
/// <summary>
/// File name of file used for import.
@ -55948,7 +55950,7 @@ public partial class ImportJob : Microsoft.Xrm.Sdk.Entity, System.ComponentModel
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum ImportLogState
@ -55956,7 +55958,7 @@ public enum ImportLogState
[System.Runtime.Serialization.EnumMemberAttribute()]
Active = 0,
}*/
}
/// <summary>
/// Failure reason and other detailed information for a record that failed to import.
@ -56540,7 +56542,7 @@ public partial class ImportLog : Microsoft.Xrm.Sdk.Entity, System.ComponentModel
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum ImportMapState
@ -56551,7 +56553,7 @@ public enum ImportMapState
[System.Runtime.Serialization.EnumMemberAttribute()]
Inactive = 1,
}*/
}
/// <summary>
/// Data map used in import.
@ -57254,7 +57256,7 @@ public partial class ImportMap : Microsoft.Xrm.Sdk.Entity, System.ComponentModel
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum IncidentState
@ -57268,7 +57270,7 @@ public enum IncidentState
[System.Runtime.Serialization.EnumMemberAttribute()]
Canceled = 2,
}*/
}
/// <summary>
/// Service request case associated with a contract.
@ -58724,7 +58726,7 @@ public partial class Incident : Microsoft.Xrm.Sdk.Entity, System.ComponentModel.
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum IncidentResolutionState
@ -58738,7 +58740,7 @@ public enum IncidentResolutionState
[System.Runtime.Serialization.EnumMemberAttribute()]
Canceled = 2,
}*/
}
/// <summary>
/// Special type of activity that includes description of the resolution, billing status, and the duration of the case.
@ -59781,7 +59783,7 @@ public partial class InvalidDependency : Microsoft.Xrm.Sdk.Entity, System.Compon
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum InvoiceState
@ -59798,7 +59800,7 @@ public enum InvoiceState
[System.Runtime.Serialization.EnumMemberAttribute()]
Canceled = 3,
}*/
}
/// <summary>
/// Order that has been billed.
@ -63179,7 +63181,7 @@ public partial class IsvConfig : Microsoft.Xrm.Sdk.Entity, System.ComponentModel
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum KbArticleState
@ -63193,7 +63195,7 @@ public enum KbArticleState
[System.Runtime.Serialization.EnumMemberAttribute()]
Published = 3,
}*/
}
/// <summary>
/// Structured content that is part of the knowledge base.
@ -64891,7 +64893,7 @@ public partial class KbArticleTemplate : Microsoft.Xrm.Sdk.Entity, System.Compon
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum LeadState
@ -64905,7 +64907,7 @@ public enum LeadState
[System.Runtime.Serialization.EnumMemberAttribute()]
Disqualified = 2,
}*/
}
/// <summary>
/// Prospect or potential sales opportunity. Leads are converted into accounts, contacts, or opportunities when they are qualified. Otherwise, they are deleted or archived.
@ -68688,7 +68690,7 @@ public partial class LeadProduct : Microsoft.Xrm.Sdk.Entity, System.ComponentMod
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum LetterState
@ -68702,7 +68704,7 @@ public enum LetterState
[System.Runtime.Serialization.EnumMemberAttribute()]
Canceled = 2,
}*/
}
/// <summary>
/// Activity that tracks the delivery of a letter. The activity can contain the electronic copy of the letter.
@ -70364,7 +70366,7 @@ public partial class License : Microsoft.Xrm.Sdk.Entity, System.ComponentModel.I
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum ListState
@ -70375,7 +70377,7 @@ public enum ListState
[System.Runtime.Serialization.EnumMemberAttribute()]
Inactive = 1,
}*/
}
/// <summary>
/// Group of existing or potential customers created for a marketing campaign or other sales purposes.
@ -71764,7 +71766,7 @@ public partial class ListMember : Microsoft.Xrm.Sdk.Entity, System.ComponentMode
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum LookUpMappingState
@ -71772,7 +71774,7 @@ public enum LookUpMappingState
[System.Runtime.Serialization.EnumMemberAttribute()]
Active = 0,
}*/
}
/// <summary>
/// In a data map, maps a lookup attribute in a source file to Microsoft Dynamics CRM.
@ -72180,7 +72182,7 @@ public partial class LookUpMapping : Microsoft.Xrm.Sdk.Entity, System.ComponentM
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum MailMergeTemplateState
@ -72191,7 +72193,7 @@ public enum MailMergeTemplateState
[System.Runtime.Serialization.EnumMemberAttribute()]
Inactive = 1,
}*/
}
/// <summary>
/// Template for a mail merge document that contains the standard attributes of that document.
@ -74280,7 +74282,7 @@ public partial class MonthlyFiscalCalendar : Microsoft.Xrm.Sdk.Entity, System.Co
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum OpportunityState
@ -74294,7 +74296,7 @@ public enum OpportunityState
[System.Runtime.Serialization.EnumMemberAttribute()]
Lost = 2,
}*/
}
/// <summary>
/// Potential revenue-generating event, or sale to an account, which needs to be tracked through a sales process to completion.
@ -76011,7 +76013,7 @@ public partial class Opportunity : Microsoft.Xrm.Sdk.Entity, System.ComponentMod
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum OpportunityCloseState
@ -76025,7 +76027,7 @@ public enum OpportunityCloseState
[System.Runtime.Serialization.EnumMemberAttribute()]
Canceled = 2,
}*/
}
/// <summary>
/// Activity that is created automatically when an opportunity is closed, containing information such as the description of the closing and actual revenue.
@ -77977,7 +77979,7 @@ public partial class OpportunityProduct : Microsoft.Xrm.Sdk.Entity, System.Compo
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum OrderCloseState
@ -77991,7 +77993,7 @@ public enum OrderCloseState
[System.Runtime.Serialization.EnumMemberAttribute()]
Canceled = 2,
}*/
}
/// <summary>
/// Activity generated automatically when an order is closed.
@ -83464,7 +83466,7 @@ public partial class OrganizationUI : Microsoft.Xrm.Sdk.Entity, System.Component
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum OwnerMappingState
@ -83472,7 +83474,7 @@ public enum OwnerMappingState
[System.Runtime.Serialization.EnumMemberAttribute()]
Active = 0,
}*/
}
/// <summary>
/// In a data map, maps ownership data from the source file to Microsoft Dynamics CRM.
@ -83898,7 +83900,7 @@ public partial class OwnerMapping : Microsoft.Xrm.Sdk.Entity, System.ComponentMo
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum PhoneCallState
@ -83912,7 +83914,7 @@ public enum PhoneCallState
[System.Runtime.Serialization.EnumMemberAttribute()]
Canceled = 2,
}*/
}
/// <summary>
/// Activity to track a telephone call.
@ -85310,7 +85312,7 @@ public partial class PhoneCall : Microsoft.Xrm.Sdk.Entity, System.ComponentModel
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum PickListMappingState
@ -85318,7 +85320,7 @@ public enum PickListMappingState
[System.Runtime.Serialization.EnumMemberAttribute()]
Active = 0,
}*/
}
/// <summary>
/// In a data map, maps list values from the source file to Microsoft Dynamics CRM.
@ -88719,7 +88721,7 @@ public partial class PostLike : Microsoft.Xrm.Sdk.Entity, System.ComponentModel.
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum PriceLevelState
@ -88730,7 +88732,7 @@ public enum PriceLevelState
[System.Runtime.Serialization.EnumMemberAttribute()]
Inactive = 1,
}*/
}
/// <summary>
/// Entity that defines pricing levels.
@ -93295,7 +93297,7 @@ public partial class ProcessSession : Microsoft.Xrm.Sdk.Entity, System.Component
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum ProductState
@ -93306,7 +93308,7 @@ public enum ProductState
[System.Runtime.Serialization.EnumMemberAttribute()]
Inactive = 1,
}*/
}
/// <summary>
/// Information about products and their pricing information.
@ -100282,7 +100284,7 @@ public partial class QueueItem : Microsoft.Xrm.Sdk.Entity, System.ComponentModel
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum QuoteState
@ -100299,7 +100301,7 @@ public enum QuoteState
[System.Runtime.Serialization.EnumMemberAttribute()]
Closed = 3,
}*/
}
/// <summary>
/// Formal offer for products and/or services, proposed at specific prices and related payment terms, which is sent to a prospective customer.
@ -102328,7 +102330,7 @@ public partial class Quote : Microsoft.Xrm.Sdk.Entity, System.ComponentModel.INo
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum QuoteCloseState
@ -102342,7 +102344,7 @@ public enum QuoteCloseState
[System.Runtime.Serialization.EnumMemberAttribute()]
Canceled = 2,
}*/
}
/// <summary>
/// Activity generated when a quote is closed.
@ -107004,7 +107006,7 @@ public partial class RecurringAppointmentMaster : Microsoft.Xrm.Sdk.Entity, Syst
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum RelationshipRoleState
@ -107015,7 +107017,7 @@ public enum RelationshipRoleState
[System.Runtime.Serialization.EnumMemberAttribute()]
Inactive = 1,
}*/
}
/// <summary>
/// Relationship between an account or contact and an opportunity.
@ -115072,7 +115074,7 @@ public partial class SalesLiteratureItem : Microsoft.Xrm.Sdk.Entity, System.Comp
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum SalesOrderState
@ -115092,7 +115094,7 @@ public enum SalesOrderState
[System.Runtime.Serialization.EnumMemberAttribute()]
Invoiced = 4,
}*/
}
/// <summary>
/// Quote that has been accepted.
@ -120852,7 +120854,7 @@ public partial class SdkMessagePair : Microsoft.Xrm.Sdk.Entity, System.Component
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum SdkMessageProcessingStepState
@ -120863,7 +120865,7 @@ public enum SdkMessageProcessingStepState
[System.Runtime.Serialization.EnumMemberAttribute()]
Disabled = 1,
}*/
}
/// <summary>
/// Stage in the execution pipeline that a plug-in is to execute.
@ -125550,7 +125552,7 @@ public partial class Service : Microsoft.Xrm.Sdk.Entity, System.ComponentModel.I
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum ServiceAppointmentState
@ -125567,7 +125569,7 @@ public enum ServiceAppointmentState
[System.Runtime.Serialization.EnumMemberAttribute()]
Scheduled = 3,
}*/
}
/// <summary>
/// Activity offered by the organization to satisfy its customer's needs. Each service activity includes date, time, duration, and required resources.
@ -132591,8 +132593,6 @@ public partial class SystemForm : Microsoft.Xrm.Sdk.Entity, System.ComponentMode
}
}
/// <summary>
/// Person with access to the Microsoft CRM system and who owns objects in the Microsoft CRM database.
/// </summary>
@ -146900,7 +146900,6 @@ public partial class SystemUser : Microsoft.Xrm.Sdk.Entity, System.ComponentMode
}
}
/// <summary>
///
/// </summary>
@ -147275,7 +147274,7 @@ public partial class SystemUserRoles : Microsoft.Xrm.Sdk.Entity, System.Componen
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum TaskState
@ -147289,7 +147288,7 @@ public enum TaskState
[System.Runtime.Serialization.EnumMemberAttribute()]
Canceled = 2,
}*/
}
/// <summary>
/// Generic activity representing work needed to be done.
@ -153380,7 +153379,7 @@ public partial class TimeZoneRule : Microsoft.Xrm.Sdk.Entity, System.ComponentMo
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum TransactionCurrencyState
@ -153391,7 +153390,7 @@ public enum TransactionCurrencyState
[System.Runtime.Serialization.EnumMemberAttribute()]
Inactive = 1,
}*/
}
/// <summary>
/// Currency in which a financial transaction is carried out.
@ -154896,7 +154895,7 @@ public partial class TransactionCurrency : Microsoft.Xrm.Sdk.Entity, System.Comp
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum TransformationMappingState
@ -154904,7 +154903,7 @@ public enum TransformationMappingState
[System.Runtime.Serialization.EnumMemberAttribute()]
Active = 0,
}*/
}
/// <summary>
/// In a data map, maps the transformation of source attributes to Microsoft Dynamics CRM attributes.
@ -161202,7 +161201,7 @@ public partial class UserForm : Microsoft.Xrm.Sdk.Entity, System.ComponentModel.
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum UserQueryState
@ -161213,7 +161212,7 @@ public enum UserQueryState
[System.Runtime.Serialization.EnumMemberAttribute()]
Inactive = 1,
}*/
}
/// <summary>
/// Saved database query that is owned by a user.
@ -164515,7 +164514,7 @@ public partial class WebResource : Microsoft.Xrm.Sdk.Entity, System.ComponentMod
}
}
}
/*
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "5.0.9690.2153")]
public enum WorkflowState
@ -164526,7 +164525,7 @@ public enum WorkflowState
[System.Runtime.Serialization.EnumMemberAttribute()]
Activated = 1,
}*/
}
/// <summary>
/// Set of logical rules that define the steps necessary to automate a specific business process, task, or set of actions to be performed.
@ -168684,4 +168683,3 @@ public partial class ServiceContext : Microsoft.Xrm.Sdk.Client.OrganizationServi
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,46 @@
// Copyright (c) 2012 - 2013, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using WebsitePanel.Providers.HostedSolution;
namespace WebsitePanel.Providers.HostedSolution
{
public class CRMProvider2013 : CRMBase
{
public override bool IsInstalled()
{
return CRMServerVersion.StartsWith("6.");
}
}
}

View file

@ -0,0 +1,152 @@
// Copyright (c) 2012, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using WebsitePanel.Providers.Common;
using WebsitePanel.Server.Utils;
using System.Text;
using System.Management.Automation.Runspaces;
namespace WebsitePanel.Providers.HostedSolution
{
public class HostedSolutionLog
{
public static string LogPrefix = "HostedSolution";
public static void LogStart(string message, params object[] args)
{
string text = String.Format(message, args);
Log.WriteStart("{0} {1}", LogPrefix, text);
}
public static void LogEnd(string message, params object[] args)
{
string text = String.Format(message, args);
Log.WriteEnd("{0} {1}", LogPrefix, text);
}
public static void LogInfo(string message)
{
Log.WriteInfo("{0} {1}", LogPrefix, message);
}
public static void LogInfo(string message, params object[] args)
{
string text = String.Format(message, args);
Log.WriteInfo("{0} {1}", LogPrefix, text);
}
public static void LogWarning(string message)
{
Log.WriteWarning("{0} {1}", LogPrefix, message);
}
public static void LogWarning(string message, params object[] args)
{
string text = String.Format(message, args);
Log.WriteWarning("{0} {1}", LogPrefix, text);
}
public static void LogError(Exception ex)
{
Log.WriteError(LogPrefix, ex);
}
public static void LogError(string message, Exception ex)
{
string text = String.Format("{0} {1}", LogPrefix, message);
Log.WriteError(text, ex);
}
public static void DebugInfo(string message, params object[] args)
{
string text = String.Format(message, args);
Log.WriteInfo("{0} {1}", LogPrefix, text);
}
public static void EndLog(string message, ResultObject res, string errorCode, Exception ex)
{
if (res != null)
{
res.IsSuccess = false;
if (!string.IsNullOrEmpty(errorCode))
res.ErrorCodes.Add(errorCode);
}
if (ex != null)
LogError(ex);
//LogRecord.
LogEnd(message);
}
public static void EndLog(string message, ResultObject res, string errorCode)
{
EndLog(message, res, errorCode, null);
}
public static void EndLog(string message, ResultObject res)
{
EndLog(message, res, null);
}
public static void EndLog(string message)
{
EndLog(message, null);
}
internal static T StartLog<T>(string message) where T : ResultObject, new()
{
LogStart(message);
T res = new T();
res.IsSuccess = true;
return res;
}
public static void DebugCommand(Command cmd)
{
StringBuilder sb = new StringBuilder(cmd.CommandText);
foreach (CommandParameter parameter in cmd.Parameters)
{
string formatString = " -{0} {1}";
if (parameter.Value is string)
formatString = " -{0} '{1}'";
else if (parameter.Value is bool)
formatString = " -{0} ${1}";
sb.AppendFormat(formatString, parameter.Name, parameter.Value);
}
Log.WriteInfo("{0} {1}", LogPrefix, sb.ToString());
}
}
}

View file

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("WebsitePanel.Providers.HostedSolution.Crm2013")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("WebsitePanel.Providers.HostedSolution.Crm2013")]
[assembly: AssemblyCopyright("Copyright © 2013")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("111E4961-46B0-4323-9EEB-8FE1DD1D48F6")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View file

@ -0,0 +1,100 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{1EF935C9-6DB9-47A1-B261-CB56512DF980}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>WebsitePanel.Providers.HostedSolution.Crm2013</RootNamespace>
<AssemblyName>WebsitePanel.Providers.HostedSolution.Crm2013</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\WebsitePanel.Server\bin\Crm2013\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\WebsitePanel.Server\bin\Crm2013\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.Crm.Sdk.Proxy">
<HintPath>..\..\Lib\References\Microsoft\CRM2013\Microsoft.Crm.Sdk.Proxy.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Xrm.Client">
<HintPath>..\..\Lib\References\Microsoft\CRM2013\Microsoft.Xrm.Client.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Xrm.Client.CodeGeneration">
<HintPath>..\..\Lib\References\Microsoft\CRM2013\Microsoft.Xrm.Client.CodeGeneration.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Xrm.Portal">
<HintPath>..\..\Lib\References\Microsoft\CRM2013\Microsoft.Xrm.Portal.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Xrm.Portal.Files">
<HintPath>..\..\Lib\References\Microsoft\CRM2013\Microsoft.Xrm.Portal.Files.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Xrm.Sdk">
<HintPath>..\..\Lib\References\Microsoft\CRM2013\Microsoft.Xrm.Sdk.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Xrm.Sdk.Deployment">
<HintPath>..\..\Lib\References\Microsoft\CRM2013\Microsoft.Xrm.Sdk.Deployment.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Xrm.Sdk.Workflow">
<HintPath>..\..\Lib\References\Microsoft\CRM2013\Microsoft.Xrm.Sdk.Workflow.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\Lib\System.Management.Automation.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.ServiceModel" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="CRMBase.cs" />
<Compile Include="CRMProvider2013.cs" />
<Compile Include="HostedSolutionLog.cs" />
<Compile Include="MyOrganizationCrmSdkTypes.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\WebsitePanel.Providers.Base\WebsitePanel.Providers.Base.csproj">
<Project>{684C932A-6C75-46AC-A327-F3689D89EB42}</Project>
<Name>WebsitePanel.Providers.Base</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\WebsitePanel.Server.Utils\WebsitePanel.Server.Utils.csproj">
<Project>{E91E52F3-9555-4D00-B577-2B1DBDD87CA7}</Project>
<Name>WebsitePanel.Server.Utils</Name>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View file

@ -328,7 +328,7 @@ namespace WebsitePanel.Providers.HostedSolution
return retOrganization;
}
public OrganizationResult CreateOrganization(Guid organizationId, string organizationUniqueName, string organizationFriendlyName, string ou, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation, long maxSize)
public OrganizationResult CreateOrganization(Guid organizationId, string organizationUniqueName, string organizationFriendlyName, int baseLanguageCode, string ou, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation, long maxSize)
{
return CreateOrganizationInternal(organizationId, organizationUniqueName, organizationFriendlyName, baseCurrencyCode, baseCurrencyName, baseCurrencySymbol, initialUserDomainName, initialUserFirstName, initialUserLastName, initialUserPrimaryEmail, organizationCollation);
}
@ -1573,6 +1573,11 @@ namespace WebsitePanel.Providers.HostedSolution
ret.IsSuccess = false;
return ret;
}
public int[] GetInstalledLanguagePacks()
{
return null;
}
}
}

View file

@ -68,6 +68,8 @@ namespace WebsitePanel.Providers.CRM {
private System.Threading.SendOrPostCallback GetCurrencyListOperationCompleted;
private System.Threading.SendOrPostCallback GetInstalledLanguagePacksOperationCompleted;
private System.Threading.SendOrPostCallback DeleteOrganizationOperationCompleted;
private System.Threading.SendOrPostCallback CreateCRMUserOperationCompleted;
@ -96,7 +98,7 @@ namespace WebsitePanel.Providers.CRM {
/// <remarks/>
public CRM() {
this.Url = "http://localhost:9004/CRM.asmx";
this.Url = "http://localhost:9003/CRM.asmx";
}
/// <remarks/>
@ -108,6 +110,9 @@ namespace WebsitePanel.Providers.CRM {
/// <remarks/>
public event GetCurrencyListCompletedEventHandler GetCurrencyListCompleted;
/// <remarks/>
public event GetInstalledLanguagePacksCompletedEventHandler GetInstalledLanguagePacksCompleted;
/// <remarks/>
public event DeleteOrganizationCompletedEventHandler DeleteOrganizationCompleted;
@ -150,11 +155,12 @@ namespace WebsitePanel.Providers.CRM {
/// <remarks/>
[System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/CreateOrganization", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public OrganizationResult CreateOrganization(System.Guid organizationId, string organizationUniqueName, string organizationFriendlyName, string ou, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation, long maxSize) {
public OrganizationResult CreateOrganization(System.Guid organizationId, string organizationUniqueName, string organizationFriendlyName, int baseLanguageCode, string ou, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation, long maxSize) {
object[] results = this.Invoke("CreateOrganization", new object[] {
organizationId,
organizationUniqueName,
organizationFriendlyName,
baseLanguageCode,
ou,
baseCurrencyCode,
baseCurrencyName,
@ -169,11 +175,28 @@ namespace WebsitePanel.Providers.CRM {
}
/// <remarks/>
public System.IAsyncResult BeginCreateOrganization(System.Guid organizationId, string organizationUniqueName, string organizationFriendlyName, string ou, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation, long maxSize, System.AsyncCallback callback, object asyncState) {
public System.IAsyncResult BeginCreateOrganization(
System.Guid organizationId,
string organizationUniqueName,
string organizationFriendlyName,
int baseLanguageCode,
string ou,
string baseCurrencyCode,
string baseCurrencyName,
string baseCurrencySymbol,
string initialUserDomainName,
string initialUserFirstName,
string initialUserLastName,
string initialUserPrimaryEmail,
string organizationCollation,
long maxSize,
System.AsyncCallback callback,
object asyncState) {
return this.BeginInvoke("CreateOrganization", new object[] {
organizationId,
organizationUniqueName,
organizationFriendlyName,
baseLanguageCode,
ou,
baseCurrencyCode,
baseCurrencyName,
@ -193,12 +216,12 @@ namespace WebsitePanel.Providers.CRM {
}
/// <remarks/>
public void CreateOrganizationAsync(System.Guid organizationId, string organizationUniqueName, string organizationFriendlyName, string ou, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation, long maxSize) {
this.CreateOrganizationAsync(organizationId, organizationUniqueName, organizationFriendlyName, ou, baseCurrencyCode, baseCurrencyName, baseCurrencySymbol, initialUserDomainName, initialUserFirstName, initialUserLastName, initialUserPrimaryEmail, organizationCollation, maxSize, null);
public void CreateOrganizationAsync(System.Guid organizationId, string organizationUniqueName, string organizationFriendlyName, int baseLanguageCode, string ou, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation, long maxSize) {
this.CreateOrganizationAsync(organizationId, organizationUniqueName, organizationFriendlyName, baseLanguageCode, ou, baseCurrencyCode, baseCurrencyName, baseCurrencySymbol, initialUserDomainName, initialUserFirstName, initialUserLastName, initialUserPrimaryEmail, organizationCollation, maxSize, null);
}
/// <remarks/>
public void CreateOrganizationAsync(System.Guid organizationId, string organizationUniqueName, string organizationFriendlyName, string ou, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation, long maxSize, object userState) {
public void CreateOrganizationAsync(System.Guid organizationId, string organizationUniqueName, string organizationFriendlyName, int baseLanguageCode, string ou, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation, long maxSize, object userState) {
if ((this.CreateOrganizationOperationCompleted == null)) {
this.CreateOrganizationOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreateOrganizationOperationCompleted);
}
@ -206,6 +229,7 @@ namespace WebsitePanel.Providers.CRM {
organizationId,
organizationUniqueName,
organizationFriendlyName,
baseLanguageCode,
ou,
baseCurrencyCode,
baseCurrencyName,
@ -303,6 +327,45 @@ namespace WebsitePanel.Providers.CRM {
}
}
/// <remarks/>
[System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetInstalledLanguagePacks", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public int[] GetInstalledLanguagePacks() {
object[] results = this.Invoke("GetInstalledLanguagePacks", new object[0]);
return ((int[])(results[0]));
}
/// <remarks/>
public System.IAsyncResult BeginGetInstalledLanguagePacks(System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("GetInstalledLanguagePacks", new object[0], callback, asyncState);
}
/// <remarks/>
public int[] EndGetInstalledLanguagePacks(System.IAsyncResult asyncResult) {
object[] results = this.EndInvoke(asyncResult);
return ((int[])(results[0]));
}
/// <remarks/>
public void GetInstalledLanguagePacksAsync() {
this.GetInstalledLanguagePacksAsync(null);
}
/// <remarks/>
public void GetInstalledLanguagePacksAsync(object userState) {
if ((this.GetInstalledLanguagePacksOperationCompleted == null)) {
this.GetInstalledLanguagePacksOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetInstalledLanguagePacksOperationCompleted);
}
this.InvokeAsync("GetInstalledLanguagePacks", new object[0], this.GetInstalledLanguagePacksOperationCompleted, userState);
}
private void OnGetInstalledLanguagePacksOperationCompleted(object arg) {
if ((this.GetInstalledLanguagePacksCompleted != null)) {
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.GetInstalledLanguagePacksCompleted(this, new GetInstalledLanguagePacksCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/>
[System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/DeleteOrganization", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
@ -981,6 +1044,32 @@ namespace WebsitePanel.Providers.CRM {
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
public delegate void GetInstalledLanguagePacksCompletedEventHandler(object sender, GetInstalledLanguagePacksCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class GetInstalledLanguagePacksCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
private object[] results;
internal GetInstalledLanguagePacksCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
base(exception, cancelled, userState) {
this.results = results;
}
/// <remarks/>
public int[] Result {
get {
this.RaiseExceptionIfNecessary();
return ((int[])(this.results[0]));
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
public delegate void DeleteOrganizationCompletedEventHandler(object sender, DeleteOrganizationCompletedEventArgs e);

View file

@ -1,5 +1,5 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
# Visual Studio 2010
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Caching Application Block", "Caching Application Block", "{C8E6F2E4-A5B8-486A-A56E-92D864524682}"
ProjectSection(SolutionItems) = preProject
Bin\Microsoft.Practices.EnterpriseLibrary.Common.dll = Bin\Microsoft.Practices.EnterpriseLibrary.Common.dll
@ -148,6 +148,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Providers.DNS.
{E91E52F3-9555-4D00-B577-2B1DBDD87CA7} = {E91E52F3-9555-4D00-B577-2B1DBDD87CA7}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Providers.HostedSolution.Crm2013", "WebsitePanel.Providers.HostedSolution.Crm2013\WebsitePanel.Providers.HostedSolution.Crm2013.csproj", "{1EF935C9-6DB9-47A1-B261-CB56512DF980}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -748,6 +750,16 @@ Global
{FA0FB0BA-5A39-4F4E-8EC2-B806B58B74D4}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{FA0FB0BA-5A39-4F4E-8EC2-B806B58B74D4}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{FA0FB0BA-5A39-4F4E-8EC2-B806B58B74D4}.Release|x86.ActiveCfg = Release|Any CPU
{1EF935C9-6DB9-47A1-B261-CB56512DF980}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1EF935C9-6DB9-47A1-B261-CB56512DF980}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1EF935C9-6DB9-47A1-B261-CB56512DF980}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{1EF935C9-6DB9-47A1-B261-CB56512DF980}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{1EF935C9-6DB9-47A1-B261-CB56512DF980}.Debug|x86.ActiveCfg = Debug|Any CPU
{1EF935C9-6DB9-47A1-B261-CB56512DF980}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1EF935C9-6DB9-47A1-B261-CB56512DF980}.Release|Any CPU.Build.0 = Release|Any CPU
{1EF935C9-6DB9-47A1-B261-CB56512DF980}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{1EF935C9-6DB9-47A1-B261-CB56512DF980}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{1EF935C9-6DB9-47A1-B261-CB56512DF980}.Release|x86.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View file

@ -55,9 +55,9 @@ namespace WebsitePanel.Server
[WebMethod, SoapHeader("settings")]
public OrganizationResult CreateOrganization(Guid organizationId, string organizationUniqueName, string organizationFriendlyName, string ou, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation, long maxSize)
public OrganizationResult CreateOrganization(Guid organizationId, string organizationUniqueName, string organizationFriendlyName, int baseLanguageCode, string ou, string baseCurrencyCode, string baseCurrencyName, string baseCurrencySymbol, string initialUserDomainName, string initialUserFirstName, string initialUserLastName, string initialUserPrimaryEmail, string organizationCollation, long maxSize)
{
return CrmProvider.CreateOrganization(organizationId, organizationUniqueName, organizationFriendlyName, ou, baseCurrencyCode, baseCurrencyName, baseCurrencySymbol, initialUserDomainName, initialUserFirstName, initialUserLastName, initialUserPrimaryEmail, organizationCollation, maxSize);
return CrmProvider.CreateOrganization(organizationId, organizationUniqueName, organizationFriendlyName, baseLanguageCode, ou, baseCurrencyCode, baseCurrencyName, baseCurrencySymbol, initialUserDomainName, initialUserFirstName, initialUserLastName, initialUserPrimaryEmail, organizationCollation, maxSize);
}
[WebMethod, SoapHeader("settings")]
@ -72,6 +72,13 @@ namespace WebsitePanel.Server
return CrmProvider.GetCurrencyList();
}
[WebMethod, SoapHeader("settings")]
public int[] GetInstalledLanguagePacks()
{
return CrmProvider.GetInstalledLanguagePacks();
}
[WebMethod, SoapHeader("settings")]
public ResultObject DeleteOrganization(Guid orgId)
{

View file

@ -168,7 +168,7 @@
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="bin/Crm2011;bin/Exchange2013;bin/Sharepoint2013;bin/Lync2013;bin/Lync2013HP;bin/Dns2012" />
<probing privatePath="bin/Crm2011;bin/Crm2013;bin/Exchange2013;bin/Sharepoint2013;bin/Lync2013;bin/Lync2013HP;bin/Dns2012" />
</assemblyBinding>
</runtime>
</configuration>

View file

@ -5380,4 +5380,49 @@
<data name="Quota.HostedCRM.ESSUsers" xml:space="preserve">
<value>ESS licenses per organization</value>
</data>
<data name="ResourceGroup.Hosted CRM2013" xml:space="preserve">
<value>Hosted CRM 2013</value>
</data>
<data name="HostedCRM.USER_QUOTA_HAS_BEEN_REACHED2013_0" xml:space="preserve">
<value>CRM users quota (Professional license) has been reached.</value>
</data>
<data name="HostedCRM.USER_QUOTA_HAS_BEEN_REACHED2013_2" xml:space="preserve">
<value>CRM users quota (Basic license) has been reached.</value>
</data>
<data name="HostedCRM.USER_QUOTA_HAS_BEEN_REACHED2013_5" xml:space="preserve">
<value>CRM users quota (Essential license) has been reached.</value>
</data>
<data name="Quota.HostedCRM2013.BasicUsers" xml:space="preserve">
<value>Basic licenses per organization</value>
</data>
<data name="Quota.HostedCRM2013.EssentialUsers" xml:space="preserve">
<value>Essential licenses per organization</value>
</data>
<data name="Quota.HostedCRM2013.MaxDatabaseSize" xml:space="preserve">
<value>Max Database Size, MB</value>
</data>
<data name="Quota.HostedCRM2013.Organization" xml:space="preserve">
<value>CRM Organization</value>
</data>
<data name="Quota.HostedCRM2013.ProfessionalUsers" xml:space="preserve">
<value>Professional licenses per organization</value>
</data>
<data name="HostedCRM.LicenseBasic" xml:space="preserve">
<value>Basic</value>
</data>
<data name="HostedCRM.LicenseESS" xml:space="preserve">
<value>ESS</value>
</data>
<data name="HostedCRM.LicenseEssential" xml:space="preserve">
<value>Essential</value>
</data>
<data name="HostedCRM.LicenseFull" xml:space="preserve">
<value>Full</value>
</data>
<data name="HostedCRM.LicenseLimited" xml:space="preserve">
<value>Limited</value>
</data>
<data name="HostedCRM.LicenseProfessional" xml:space="preserve">
<value>Professional</value>
</data>
</root>

View file

@ -59,6 +59,11 @@
<td><asp:DropDownList runat="server" ID="ddlCollation" /></td>
</tr>
<tr height="23px">
<td class="FormLabel150"><asp:Label runat="server" ID="lblBaseLanguage" meta:resourcekey="lblBaseLanguage" Text="Base Language"/></td>
<td><asp:DropDownList runat="server" ID="ddlBaseLanguage" /></td>
</tr>
</table>
<div class="FormFooterClean">
<asp:Button runat="server" meta:resourcekey="btnCreate" ID="btnCreate" CssClass="Button2" OnClick="btnCreate_Click" />

View file

@ -28,14 +28,59 @@
using System;
using System.Web.UI.WebControls;
using System.Globalization;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using WebsitePanel.Providers.Common;
using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.Providers.ResultObjects;
using WebsitePanel.EnterpriseServer;
namespace WebsitePanel.Portal.CRM
{
public partial class CRMOrganizationDetails : WebsitePanelModuleBase
{
private StringDictionary ConvertArrayToDictionary(string[] settings)
{
StringDictionary r = new StringDictionary();
foreach (string setting in settings)
{
int idx = setting.IndexOf('=');
r.Add(setting.Substring(0, idx), setting.Substring(idx + 1));
}
return r;
}
private StringDictionary serviceSettings = null;
private StringDictionary ServiceSettings
{
get
{
if (serviceSettings != null)
return serviceSettings;
PackageInfo pi = PackagesHelper.GetCachedPackage(PanelSecurity.PackageId);
ServiceInfo[] si = ES.Services.Servers.GetServicesByServerIdGroupName(pi.ServerId, ResourceGroups.HostedCRM2013);
if (si.Length == 0) si = ES.Services.Servers.GetServicesByServerIdGroupName(pi.ServerId, ResourceGroups.HostedCRM);
if (si.Length > 0)
{
int serviceId = si[0].ServiceId;
string[] settings = ES.Services.Servers.GetServiceSettings(serviceId);
serviceSettings = ConvertArrayToDictionary(settings);
}
else
serviceSettings = new StringDictionary();
return serviceSettings;
}
}
private StringArrayResultObject BindCollations()
{
StringArrayResultObject res = ES.Services.CRM.GetCollation(PanelSecurity.PackageId);
@ -43,8 +88,10 @@ namespace WebsitePanel.Portal.CRM
{
ddlCollation.DataSource = res.Value;
ddlCollation.DataBind();
ddlCollation.SelectedValue = "Latin1_General_CI_AI";
Utils.SelectListItem(ddlCollation, "Latin1_General_CI_AI"); // default
Utils.SelectListItem(ddlCollation, ServiceSettings[Constants.Collation]);
}
return res;
}
@ -66,15 +113,35 @@ namespace WebsitePanel.Portal.CRM
}));
ddlCurrency.Items.Add(item);
}
Utils.SelectListItem(ddlCurrency, "USD|US Dollar|$|United States"); // default
Utils.SelectListItem(ddlCurrency, ServiceSettings[Constants.Currency]);
}
ddlCurrency.SelectedValue = "USD|US Dollar|$|United States";
}
return res;
}
private void BindBaseLanguage()
{
ddlBaseLanguage.Items.Clear();
int[] langPacksId = ES.Services.CRM.GetInstalledLanguagePacks(PanelSecurity.PackageId);
if (langPacksId != null)
{
foreach (int langId in langPacksId)
{
CultureInfo ci = CultureInfo.GetCultureInfo(langId);
ListItem item = new ListItem(ci.EnglishName, langId.ToString());
ddlBaseLanguage.Items.Add(item);
}
Utils.SelectListItem(ddlBaseLanguage, "1033"); // default
Utils.SelectListItem(ddlBaseLanguage, ServiceSettings[Constants.BaseLanguage]);
}
}
private void ShowCrmOrganizationDetails(string admin, Organization org)
@ -82,6 +149,7 @@ namespace WebsitePanel.Portal.CRM
btnCreate.Visible = false;
ddlCollation.Enabled = false;
ddlCurrency.Enabled = false;
ddlBaseLanguage.Enabled = false;
administrator.Visible = false;
lblAdmin.Visible = true;
lblAdmin.Text = admin;
@ -89,7 +157,6 @@ namespace WebsitePanel.Portal.CRM
hlOrganizationPage.Visible = true;
hlOrganizationPage.NavigateUrl = org.CrmUrl;
hlOrganizationPage.Text = org.CrmUrl;
}
private void ShowOrganizationDetails()
@ -97,12 +164,12 @@ namespace WebsitePanel.Portal.CRM
btnCreate.Visible = true;
ddlCollation.Enabled = true;
ddlCurrency.Enabled = true;
ddlBaseLanguage.Enabled = true;
administrator.Visible = true;
lblAdmin.Visible = false;
btnDelete.Visible = false;
hlOrganizationPage.Visible = false;
}
@ -125,22 +192,20 @@ namespace WebsitePanel.Portal.CRM
return;
}
BindBaseLanguage();
Organization org = ES.Services.Organizations.GetOrganization(PanelRequest.ItemID);
lblCrmOrgId.Text = org.OrganizationId;
lblCrmOrgName.Text = org.Name;
if (!string.IsNullOrEmpty(org.CrmCurrency))//CRM organization
if (!string.IsNullOrEmpty(org.CrmCurrency)) //CRM organization
{
OrganizationUser admin =
ES.Services.Organizations.GetUserGeneralSettings(org.Id, org.CrmAdministratorId);
ddlCurrency.SelectedValue = org.CrmCurrency;
ddlCollation.SelectedValue = org.CrmCollation;
Utils.SelectListItem(ddlCurrency, org.CrmCurrency);
Utils.SelectListItem(ddlCollation, org.CrmCollation);
Utils.SelectListItem(ddlBaseLanguage, org.CrmLanguadgeCode);
ShowCrmOrganizationDetails(admin.DisplayName, org);
}
@ -172,13 +237,15 @@ namespace WebsitePanel.Portal.CRM
return;
}
int baseLanguage = 0;
int.TryParse(ddlBaseLanguage.SelectedValue, out baseLanguage);
EnterpriseServer.esCRM CRM = ES.Services.CRM;
CRM.Timeout = 7200000; //# Set longer timeout
OrganizationResult res = CRM.CreateOrganization(org.Id, cuurrencyData[0], cuurrencyData[1], cuurrencyData[2], cuurrencyData[3],
administrator.GetAccountId(), ddlCollation.SelectedValue);
administrator.GetAccountId(), ddlCollation.SelectedValue, baseLanguage);
messageBox.ShowMessage(res, "CreateCrmOrganization", "HostedCRM");
if (res.IsSuccess)

View file

@ -1,7 +1,34 @@
// Copyright (c) 2014, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.4927
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@ -184,6 +211,24 @@ namespace WebsitePanel.Portal.CRM {
/// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddlCollation;
/// <summary>
/// lblBaseLanguage control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Label lblBaseLanguage;
/// <summary>
/// ddlBaseLanguage control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddlBaseLanguage;
/// <summary>
/// btnCreate control.
/// </summary>
@ -201,14 +246,5 @@ namespace WebsitePanel.Portal.CRM {
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Button btnDelete;
/// <summary>
/// FormComments control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize FormComments;
}
}

View file

@ -63,7 +63,11 @@ namespace WebsitePanel.Portal
Organization org = ES.Services.Organizations.GetOrganization(PanelRequest.ItemID);
PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId);
int limitDBSize = cntx.Quotas[Quotas.CRM_MAXDATABASESIZE].QuotaAllocatedValue;
string quotaName = "";
if (cntx.Groups.ContainsKey(ResourceGroups.HostedCRM2013)) quotaName = Quotas.CRM2013_MAXDATABASESIZE;
else if (cntx.Groups.ContainsKey(ResourceGroups.HostedCRM)) quotaName = Quotas.CRM_MAXDATABASESIZE;
int limitDBSize = cntx.Quotas[quotaName].QuotaAllocatedValue;
//maxStorageSettingsValue.ParentQuotaValue = limitDBSize;
maxStorageSettingsValue.ParentQuotaValue = -1;
@ -86,7 +90,12 @@ namespace WebsitePanel.Portal
try
{
PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId);
long limitSize = cntx.Quotas[Quotas.CRM_MAXDATABASESIZE].QuotaAllocatedValue;
string quotaName = "";
if (cntx.Groups.ContainsKey(ResourceGroups.HostedCRM2013)) quotaName = Quotas.CRM2013_MAXDATABASESIZE;
else if (cntx.Groups.ContainsKey(ResourceGroups.HostedCRM)) quotaName = Quotas.CRM_MAXDATABASESIZE;
long limitSize = cntx.Quotas[quotaName].QuotaAllocatedValue;
long maxSize = maxStorageSettingsValue.QuotaValue;

View file

@ -54,9 +54,6 @@
<td class="FormLabel150"><asp:Localize runat="server" meta:resourcekey="locLicenseType" Text="License Type:" /></td>
<td>
<asp:DropDownList ID="ddlLicenseType" runat="server" CssClass="NormalTextBox" AutoPostBack="false">
<asp:ListItem Value="0" meta:resourcekey="ddlLicenseTypeFull">Full</asp:ListItem>
<asp:ListItem Value="2" meta:resourcekey="ddlLicenseTypeLimited">Limited</asp:ListItem>
<asp:ListItem Value="22" meta:resourcekey="ddlLicenseTypeESS">ESS</asp:ListItem>
</asp:DropDownList>
</td>
</tr>

View file

@ -32,6 +32,7 @@ using System.Web.UI.WebControls;
using WebsitePanel.Providers.Common;
using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.Providers.ResultObjects;
using WebsitePanel.EnterpriseServer;
namespace WebsitePanel.Portal.CRM
{
@ -41,6 +42,27 @@ namespace WebsitePanel.Portal.CRM
{
if (!IsPostBack)
{
PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId);
if (cntx.Groups.ContainsKey(ResourceGroups.HostedCRM2013))
{
ddlLicenseType.Items.Add(new System.Web.UI.WebControls.ListItem(
GetSharedLocalizedString("HostedCRM.LicenseProfessional"), CRMUserLycenseTypes.PROFESSIONAL.ToString()));
ddlLicenseType.Items.Add(new System.Web.UI.WebControls.ListItem(
GetSharedLocalizedString("HostedCRM.LicenseBasic"), CRMUserLycenseTypes.BASIC.ToString()));
ddlLicenseType.Items.Add(new System.Web.UI.WebControls.ListItem(
GetSharedLocalizedString("HostedCRM.LicenseEssential"), CRMUserLycenseTypes.ESSENTIAL.ToString()));
}
else
{
ddlLicenseType.Items.Add(new System.Web.UI.WebControls.ListItem(
GetSharedLocalizedString("HostedCRM.LicenseFull"), CRMUserLycenseTypes.FULL.ToString()));
ddlLicenseType.Items.Add(new System.Web.UI.WebControls.ListItem(
GetSharedLocalizedString("HostedCRM.LicenseLimited"), CRMUserLycenseTypes.LIMITED.ToString()));
ddlLicenseType.Items.Add(new System.Web.UI.WebControls.ListItem(
GetSharedLocalizedString("HostedCRM.LicenseESS"), CRMUserLycenseTypes.ESS.ToString()));
}
try
{
OrganizationUser user =
@ -61,17 +83,7 @@ namespace WebsitePanel.Portal.CRM
int cALType = userResult.Value.CALType + ((int)userResult.Value.ClientAccessMode) * 10;
switch (cALType)
{
case 0 :
case 2 :
case 22:
ddlLicenseType.SelectedValue = cALType.ToString();
break;
default:
ddlLicenseType.SelectedIndex = 0;
break;
}
Utils.SelectListItem(ddlLicenseType, cALType);
}
else
{

View file

@ -1,4 +1,4 @@
// Copyright (c) 2012, Outercurve Foundation.
// Copyright (c) 2014, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,

View file

@ -80,6 +80,7 @@
</asp:ObjectDataSource>
<br />
<asp:Panel ID="CRM2011Panel" runat="server">
<table>
<tr>
<td align="right" nowrap>
@ -105,8 +106,39 @@
<wsp:QuotaViewer ID="essusersQuota" runat="server" QuotaTypeId="2" />
</td>
</tr>
</table>
</asp:Panel>
<asp:Panel ID="CRM2013Panel" runat="server">
<table>
<tr>
<td align="right" nowrap>
<asp:Localize ID="Localize1" runat="server" meta:resourcekey="locQuota" Text="Professional licenses :"></asp:Localize>
</td>
<td>
<wsp:QuotaViewer ID="professionalusersQuota" runat="server" QuotaTypeId="2" />
</td>
</tr>
<tr>
<td align="right" nowrap>
<asp:Localize ID="locBasicQuota" runat="server" meta:resourcekey="locBasicQuota" Text="Basic licenses :"></asp:Localize>
</td>
<td>
<wsp:QuotaViewer ID="basicusersQuota" runat="server" QuotaTypeId="2" />
</td>
</tr>
<tr>
<td align="right" nowrap>
<asp:Localize ID="locEssentialQuota" runat="server" meta:resourcekey="locEssentialQuota" Text="Essential licenses :"></asp:Localize>
</td>
<td>
<wsp:QuotaViewer ID="essentialusersQuota" runat="server" QuotaTypeId="2" />
</td>
</tr>
</table>
</asp:Panel>
</div>
</div>
</div>

View file

@ -41,25 +41,42 @@ namespace WebsitePanel.Portal.CRM
{
messageBox.ShowErrorMessage("NOT_CRM_ORGANIZATION");
btnCreateUser.Enabled = false;
CRM2011Panel.Visible = false;
CRM2013Panel.Visible = false;
}
else
{
OrganizationStatistics stats = ES.Services.Organizations.GetOrganizationStatisticsByOrganization(PanelRequest.ItemID);
OrganizationStatistics tenantStats = ES.Services.Organizations.GetOrganizationStatistics(PanelRequest.ItemID);
int allocatedCrmUsers = stats.AllocatedCRMUsers;
int usedUsers = stats.CreatedCRMUsers;
usersQuota.QuotaUsedValue = usedUsers;
usersQuota.QuotaValue = allocatedCrmUsers;
PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId);
if (cntx.Groups.ContainsKey(ResourceGroups.HostedCRM2013))
{
CRM2011Panel.Visible = false;
CRM2013Panel.Visible = true;
professionalusersQuota.QuotaUsedValue = stats.CreatedProfessionalCRMUsers;
professionalusersQuota.QuotaValue = stats.AllocatedProfessionalCRMUsers;
basicusersQuota.QuotaUsedValue = stats.CreatedBasicCRMUsers;
basicusersQuota.QuotaValue = stats.AllocatedBasicCRMUsers;
essentialusersQuota.QuotaUsedValue = stats.CreatedEssentialCRMUsers;
essentialusersQuota.QuotaValue = stats.AllocatedEssentialCRMUsers;
}
else
{
CRM2011Panel.Visible = true;
CRM2013Panel.Visible = false;
usersQuota.QuotaUsedValue = stats.CreatedCRMUsers;
usersQuota.QuotaValue = stats.AllocatedCRMUsers;
limitedusersQuota.QuotaUsedValue = stats.CreatedLimitedCRMUsers;
limitedusersQuota.QuotaValue = stats.AllocatedLimitedCRMUsers;
//if (stats.AllocatedCRMUsers != -1) usersQuota.QuotaAvailable = tenantStats.AllocatedCRMUsers - tenantStats.CreatedCRMUsers;
//if (stats.AllocatedLimitedCRMUsers != -1) limitedusersQuota.QuotaAvailable = tenantStats.AllocatedLimitedCRMUsers - tenantStats.CreatedLimitedCRMUsers;
essusersQuota.QuotaUsedValue = stats.CreatedESSCRMUsers;
essusersQuota.QuotaValue = stats.AllocatedESSCRMUsers;
}
}
}

View file

@ -1,4 +1,4 @@
// Copyright (c) 2012, Outercurve Foundation.
// Copyright (c) 2014, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
@ -166,6 +166,15 @@ namespace WebsitePanel.Portal.CRM {
/// </remarks>
protected global::System.Web.UI.WebControls.ObjectDataSource odsAccountsPaged;
/// <summary>
/// CRM2011Panel control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Panel CRM2011Panel;
/// <summary>
/// locQuota control.
/// </summary>
@ -219,5 +228,68 @@ namespace WebsitePanel.Portal.CRM {
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.QuotaViewer essusersQuota;
/// <summary>
/// CRM2013Panel control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Panel CRM2013Panel;
/// <summary>
/// Localize1 control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize Localize1;
/// <summary>
/// professionalusersQuota control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.QuotaViewer professionalusersQuota;
/// <summary>
/// locBasicQuota control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize locBasicQuota;
/// <summary>
/// basicusersQuota control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.QuotaViewer basicusersQuota;
/// <summary>
/// locEssentialQuota control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize locEssentialQuota;
/// <summary>
/// essentialusersQuota control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.QuotaViewer essentialusersQuota;
}
}

View file

@ -43,9 +43,6 @@
<td class="FormLabel150"><asp:Localize runat="server" meta:resourcekey="locLicenseType" Text="License Type: *" /></td>
<td>
<asp:DropDownList ID="ddlLicenseType" runat="server" CssClass="NormalTextBox" AutoPostBack="false">
<asp:ListItem Value="0" meta:resourcekey="ddlLicenseTypeFull">Full</asp:ListItem>
<asp:ListItem Value="2" meta:resourcekey="ddlLicenseTypeLimited">Limited</asp:ListItem>
<asp:ListItem Value="22" meta:resourcekey="ddlLicenseTypeESS">ESS</asp:ListItem>
</asp:DropDownList>
</td>
</tr>

View file

@ -29,6 +29,7 @@
using System;
using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.Providers.ResultObjects;
using WebsitePanel.EnterpriseServer;
namespace WebsitePanel.Portal.CRM
{
@ -38,6 +39,28 @@ namespace WebsitePanel.Portal.CRM
{
if (!IsPostBack)
{
PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId);
if (cntx.Groups.ContainsKey(ResourceGroups.HostedCRM2013))
{
ddlLicenseType.Items.Add(new System.Web.UI.WebControls.ListItem(
GetSharedLocalizedString("HostedCRM.LicenseProfessional"), CRMUserLycenseTypes.PROFESSIONAL.ToString()));
ddlLicenseType.Items.Add(new System.Web.UI.WebControls.ListItem(
GetSharedLocalizedString("HostedCRM.LicenseBasic"), CRMUserLycenseTypes.BASIC.ToString()));
ddlLicenseType.Items.Add(new System.Web.UI.WebControls.ListItem(
GetSharedLocalizedString("HostedCRM.LicenseEssential"), CRMUserLycenseTypes.ESSENTIAL.ToString()));
}
else
{
ddlLicenseType.Items.Add(new System.Web.UI.WebControls.ListItem(
GetSharedLocalizedString("HostedCRM.LicenseFull"), CRMUserLycenseTypes.FULL.ToString()));
ddlLicenseType.Items.Add(new System.Web.UI.WebControls.ListItem(
GetSharedLocalizedString("HostedCRM.LicenseLimited"), CRMUserLycenseTypes.LIMITED.ToString()));
ddlLicenseType.Items.Add(new System.Web.UI.WebControls.ListItem(
GetSharedLocalizedString("HostedCRM.LicenseESS"), CRMUserLycenseTypes.ESS.ToString()));
}
try
{
CRMBusinessUnitsResult res =

View file

@ -1,4 +1,4 @@
// Copyright (c) 2012, Outercurve Foundation.
// Copyright (c) 2014, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,

View file

@ -206,14 +206,17 @@ namespace WebsitePanel.Portal
public static void SelectListItem(ListControl ctrl, object value)
{
string val = (value != null) ? value.ToString() : "";
ListItem item = ctrl.Items.FindByValue(val);
if (item != null)
{
// unselect currently selected item
if (ctrl.SelectedIndex != -1)
ctrl.SelectedItem.Selected = false;
string val = (value != null) ? value.ToString() : "";
ListItem item = ctrl.Items.FindByValue(val);
if (item != null) item.Selected = true;
item.Selected = true;
}
}
public static void SaveListControlState(ListControl ctrl)

View file

@ -240,6 +240,48 @@
</tr>
</asp:Panel>
<asp:Panel runat="server" ID="crm2013StatsPanel">
<tr >
<td class="OrgStatsGroup" width="100%" colspan="2">
<asp:Localize ID="locCRM2013" runat="server" meta:resourcekey="locCRM2013"
Text="CRM 2013"></asp:Localize>
</td>
</tr>
<tr class="OrgStatsRow">
<td align="right" nowrap>
<asp:HyperLink ID="lnkProfessionalCRMUsers" runat="server" meta:resourcekey="lnkProfessionalCRMUsers" Text="Professional licenses :"></asp:HyperLink>
</td>
<td>
<wsp:QuotaViewer ID="crmProfessionalUsersStats" QuotaTypeId="2" runat="server" DisplayGauge="true" />
</td>
</tr>
<tr class="OrgStatsRow">
<td align="right" nowrap>
<asp:HyperLink ID="lnkBasicCRMUsers" runat="server" meta:resourcekey="lnkBasicCRMUsers" Text="Basic licenses :"></asp:HyperLink>
</td>
<td>
<wsp:QuotaViewer ID="crmBasicUsersStats" QuotaTypeId="2" runat="server" DisplayGauge="true" />
</td>
</tr>
<tr class="OrgStatsRow">
<td align="right" nowrap>
<asp:HyperLink ID="lnkEssentialCRMUsers" runat="server" meta:resourcekey="lnkEssentialCRMUsers" Text="Essential licenses :"></asp:HyperLink>
</td>
<td>
<wsp:QuotaViewer ID="crmEssentialUsersStats" QuotaTypeId="2" runat="server" DisplayGauge="true" />
</td>
</tr>
<tr class="OrgStatsRow">
<td align="right" nowrap>
<asp:HyperLink ID="lnkCRM2013DBSize" runat="server" meta:resourcekey="lnkCRMDBSize" Text="Storage size (MB):"></asp:HyperLink>
</td>
<td>
<wsp:QuotaViewer ID="crm2013DBSize" runat="server" QuotaTypeId="2" DisplayGauge="true" />
</td>
</tr>
</asp:Panel>
<asp:Panel runat="server" ID="enterpriseStorageStatsPanel">
<tr>
<td class="OrgStatsGroup" width="100%" colspan="2">

View file

@ -224,12 +224,27 @@ namespace WebsitePanel.Portal.ExchangeServer
if (org.CrmOrganizationId != Guid.Empty)
{
if (cntx.Groups.ContainsKey(ResourceGroups.HostedCRM2013))
{
crm2013StatsPanel.Visible = true;
crmStatsPanel.Visible = false;
BindCRM2013Stats(orgStats, tenantStats);
}
else if (cntx.Groups.ContainsKey(ResourceGroups.HostedCRM))
{
crmStatsPanel.Visible = true;
crm2013StatsPanel.Visible = false;
BindCRMStats(orgStats, tenantStats);
}
}
else
{
crmStatsPanel.Visible = false;
crm2013StatsPanel.Visible = false;
}
if (cntx.Groups.ContainsKey(ResourceGroups.EnterpriseStorage))
@ -267,6 +282,30 @@ namespace WebsitePanel.Portal.ExchangeServer
crmDBSize.QuotaValue = Convert.ToInt32(stats.AllocatedCRMDiskSpace>0 ? stats.AllocatedCRMDiskSpace/(1024*1024) : -1);
}
private void BindCRM2013Stats(OrganizationStatistics stats, OrganizationStatistics tenantStats)
{
lnkProfessionalCRMUsers.NavigateUrl = EditUrl("ItemID", PanelRequest.ItemID.ToString(), "crmusers",
"SpaceID=" + PanelSecurity.PackageId);
lnkBasicCRMUsers.NavigateUrl = lnkCRMUsers.NavigateUrl;
lnkEssentialCRMUsers.NavigateUrl = lnkCRMUsers.NavigateUrl;
lnkCRM2013DBSize.NavigateUrl = EditUrl("ItemID", PanelRequest.ItemID.ToString(), "crm_storage_settings",
"SpaceID=" + PanelSecurity.PackageId);
crmProfessionalUsersStats.QuotaUsedValue = stats.CreatedProfessionalCRMUsers;
crmProfessionalUsersStats.QuotaValue = stats.AllocatedProfessionalCRMUsers;
crmBasicUsersStats.QuotaUsedValue = stats.CreatedBasicCRMUsers;
crmBasicUsersStats.QuotaValue = stats.AllocatedBasicCRMUsers;
crmEssentialUsersStats.QuotaUsedValue = stats.CreatedEssentialCRMUsers;
crmEssentialUsersStats.QuotaValue = stats.AllocatedEssentialCRMUsers;
crm2013DBSize.QuotaUsedValue = Convert.ToInt32(stats.UsedCRMDiskSpace > 0 ? stats.UsedCRMDiskSpace / (1024 * 1024) : -1);
crm2013DBSize.QuotaValue = Convert.ToInt32(stats.AllocatedCRMDiskSpace > 0 ? stats.AllocatedCRMDiskSpace / (1024 * 1024) : -1);
}
private void BindOCSStats(OrganizationStatistics stats, OrganizationStatistics tenantStats)
{
ocsUsersStats.QuotaValue = stats.AllocatedOCSUsers;

View file

@ -1,4 +1,4 @@
// Copyright (c) 2012, Outercurve Foundation.
// Copyright (c) 2014, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
@ -589,6 +589,96 @@ namespace WebsitePanel.Portal.ExchangeServer {
/// </remarks>
protected global::WebsitePanel.Portal.QuotaViewer crmDBSize;
/// <summary>
/// crm2013StatsPanel control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Panel crm2013StatsPanel;
/// <summary>
/// locCRM2013 control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize locCRM2013;
/// <summary>
/// lnkProfessionalCRMUsers control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.HyperLink lnkProfessionalCRMUsers;
/// <summary>
/// crmProfessionalUsersStats control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.QuotaViewer crmProfessionalUsersStats;
/// <summary>
/// lnkBasicCRMUsers control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.HyperLink lnkBasicCRMUsers;
/// <summary>
/// crmBasicUsersStats control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.QuotaViewer crmBasicUsersStats;
/// <summary>
/// lnkEssentialCRMUsers control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.HyperLink lnkEssentialCRMUsers;
/// <summary>
/// crmEssentialUsersStats control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.QuotaViewer crmEssentialUsersStats;
/// <summary>
/// lnkCRM2013DBSize control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.HyperLink lnkCRM2013DBSize;
/// <summary>
/// crm2013DBSize control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.QuotaViewer crm2013DBSize;
/// <summary>
/// enterpriseStorageStatsPanel control.
/// </summary>

View file

@ -213,4 +213,7 @@
<data name="Text.LyncPhoneNumbers" xml:space="preserve">
<value>Phone Numbers</value>
</data>
<data name="Text.CRMGroup2013" xml:space="preserve">
<value>CRM 2013</value>
</data>
</root>

View file

@ -200,6 +200,19 @@ namespace WebsitePanel.Portal.ExchangeServer.UserControls
}
private void PrepareCRMMenu2013(PackageContext cntx, List<MenuGroup> groups, string imagePath)
{
MenuGroup crmGroup = new MenuGroup(GetLocalizedString("Text.CRMGroup2013"), imagePath + "crm_16.png");
crmGroup.MenuItems.Add(CreateMenuItem("CRMOrganization", "CRMOrganizationDetails"));
crmGroup.MenuItems.Add(CreateMenuItem("CRMUsers", "CRMUsers"));
crmGroup.MenuItems.Add(CreateMenuItem("StorageLimits", "crm_storage_settings"));
if (crmGroup.MenuItems.Count > 0)
groups.Add(crmGroup);
}
private void PrepareBlackBerryMenu(PackageContext cntx, List<MenuGroup> groups, string imagePath)
{
MenuGroup bbGroup = new MenuGroup(GetLocalizedString("Text.BlackBerryGroup"), imagePath + "blackberry16.png");
@ -292,7 +305,9 @@ namespace WebsitePanel.Portal.ExchangeServer.UserControls
}
//CRM Menu
if (cntx.Groups.ContainsKey(ResourceGroups.HostedCRM))
if (cntx.Groups.ContainsKey(ResourceGroups.HostedCRM2013))
PrepareCRMMenu2013(cntx, groups, imagePath);
else if (cntx.Groups.ContainsKey(ResourceGroups.HostedCRM))
PrepareCRMMenu(cntx, groups, imagePath);

View file

@ -94,4 +94,20 @@
</td>
</tr>
<tr>
<td class="SubHead" width="200" nowrap>Default Currency</td>
<td><asp:DropDownList runat="server" ID="ddlCurrency"/></td>
</tr>
<tr>
<td class="SubHead" width="200" nowrap/>Default Collation</td>
<td><asp:DropDownList runat="server" ID="ddlCollation" /></td>
</tr>
<tr>
<td class="SubHead" width="200" nowrap>Default Base Language</td>
<td><asp:DropDownList runat="server" ID="ddlBaseLanguage" /></td>
</tr>
</table>

View file

@ -27,8 +27,12 @@
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Web.UI.WebControls;
using System.Globalization;
using WebsitePanel.EnterpriseServer;
using WebsitePanel.Providers.Common;
using WebsitePanel.Providers.ResultObjects;
using WebsitePanel.Providers.HostedSolution;
namespace WebsitePanel.Portal.ProviderControls
{
@ -60,8 +64,54 @@ namespace WebsitePanel.Portal.ProviderControls
int selectedAddressid = FindAddressByText(settings[Constants.CRMWebsiteIP]);
ddlCrmIpAddress.AddressId = (selectedAddressid > 0) ? selectedAddressid : 0;
ddlSchema.SelectedValue = settings[Constants.UrlSchema];
Utils.SelectListItem(ddlSchema, settings[Constants.UrlSchema]);
// Collation
StringArrayResultObject res = ES.Services.CRM.GetCollationByServiceId(PanelRequest.ServiceId);
if (res.IsSuccess)
{
ddlCollation.DataSource = res.Value;
ddlCollation.DataBind();
Utils.SelectListItem(ddlCollation, "Latin1_General_CI_AI"); // default
}
Utils.SelectListItem(ddlCollation, settings[Constants.Collation]);
// Currency
ddlCurrency.Items.Clear();
CurrencyArrayResultObject cres = ES.Services.CRM.GetCurrencyByServiceId(PanelRequest.ServiceId);
if (cres.IsSuccess)
{
foreach (Currency currency in cres.Value)
{
ListItem item = new ListItem(string.Format("{0} ({1})",
currency.RegionName, currency.CurrencyName),
string.Join("|",
new string[]
{
currency.CurrencyCode, currency.CurrencyName,
currency.CurrencySymbol, currency.RegionName
}));
ddlCurrency.Items.Add(item);
}
Utils.SelectListItem(ddlCurrency, "USD|US Dollar|$|United States"); // default
}
Utils.SelectListItem(ddlCurrency, settings[Constants.Currency]);
// Base Language
ddlBaseLanguage.Items.Clear();
int[] langPacksId = ES.Services.CRM.GetInstalledLanguagePacksByServiceId(PanelRequest.ServiceId);
if (langPacksId != null)
{
foreach (int langId in langPacksId)
{
CultureInfo ci = CultureInfo.GetCultureInfo(langId);
ListItem item = new ListItem(ci.EnglishName, langId.ToString());
ddlBaseLanguage.Items.Add(item);
}
Utils.SelectListItem(ddlBaseLanguage, "1033"); // default
}
Utils.SelectListItem(ddlBaseLanguage, settings[Constants.BaseLanguage]);
}
public void SaveSettings(System.Collections.Specialized.StringDictionary settings)
@ -97,6 +147,11 @@ namespace WebsitePanel.Portal.ProviderControls
}
settings[Constants.UrlSchema] = ddlSchema.SelectedValue;
settings[Constants.Collation] = ddlCollation.SelectedValue;
settings[Constants.Currency] = ddlCurrency.SelectedValue;
settings[Constants.BaseLanguage] = ddlBaseLanguage.SelectedValue;
}
private static int FindAddressByText(string address)

View file

@ -1,4 +1,4 @@
// Copyright (c) 2012, Outercurve Foundation.
// Copyright (c) 2014, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
@ -35,7 +35,6 @@
// </auto-generated>
//------------------------------------------------------------------------------
namespace WebsitePanel.Portal.ProviderControls {
@ -166,5 +165,32 @@ namespace WebsitePanel.Portal.ProviderControls {
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtPassword;
/// <summary>
/// ddlCurrency control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddlCurrency;
/// <summary>
/// ddlCollation control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddlCollation;
/// <summary>
/// ddlBaseLanguage control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.DropDownList ddlBaseLanguage;
}
}

View file

@ -210,6 +210,13 @@
<Compile Include="Code\ReportingServices\IResourceStorage.cs" />
<Compile Include="Code\ReportingServices\ReportingServicesUtils.cs" />
<Compile Include="Code\UserControls\Tab.cs" />
<Compile Include="CRM\CRMStorageSettings.ascx.cs">
<DependentUpon>CRMStorageSettings.ascx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="CRM\CRMStorageSettings.ascx.designer.cs">
<DependentUpon>CRMStorageSettings.ascx</DependentUpon>
</Compile>
<Compile Include="ExchangeServer\EnterpriseStorageFolderGeneralSettings.ascx.cs">
<DependentUpon>EnterpriseStorageFolderGeneralSettings.ascx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
@ -4037,6 +4044,7 @@
</ItemGroup>
<ItemGroup>
<Content Include="ApplyEnableHardQuotaFeature.ascx" />
<Content Include="CRM\CRMStorageSettings.ascx" />
<Content Include="ExchangeServer\EnterpriseStorageFolderGeneralSettings.ascx" />
<Content Include="ExchangeServer\EnterpriseStorageCreateFolder.ascx" />
<Content Include="ExchangeServer\EnterpriseStorageFolders.ascx" />