开发解锁包

包是一个顶级容器,用于保存有关应用或 package:包名称、描述和关联的命名空间。

您可以在 sfdx-project.json 项目配置文件的包描述符部分中提供包详细信息。

  • 创建和更新已解锁的包 准备好测试或共享包时,请使用命令创建包
    sf package create
  • 创建已解锁包
    的新版本 包版本是包内容和相关元数据的固定快照。通过包版本,可以管理更改,并跟踪每次发布或部署一组特定更改时的不同之处。
  • 未锁定包的代码覆盖率 在升级和发布已解锁的包
    之前,Apex 代码必须满足至少 75% 的代码覆盖率要求。您只能在临时组织和沙盒中安装不符合代码覆盖率要求的软件包版本。
  • 释放解锁的软件包 每个新的软件包
    版本在创建时都标记为 beta。在开发软件包时,您可以先创建多个软件包版本,然后再创建准备在生产组织中发布和安装的版本。
  • 更新已解锁的包版本 您可以从命令行更新包版本
    的大多数属性。例如,您可以更改包版本名称或说明。一个重要的例外是无法更改发布状态。
  • 未锁定软件包中的硬删除组件 当这些组件从未锁定的软件包中删除时,它们将在软件包
    升级期间从目标安装组织中硬删除。
  • 删除已解锁的包或包版本 使用 和 删除不再需要的包和包版本
    sf package version deletesf package delete
  • 查看软件包详细信息
    从命令行查看以前创建的软件包和软件包版本的详细信息。

创建和更新已解锁的软件包

准备好测试或共享包时,请使用命令创建包。

sf package create

如果您使用的是命名空间,请在 sfdx-project.json 文件中指定包命名空间。若要了解详细信息,请参阅了解命名空间。

若要创建包,请转到项目目录。名称成为包 alias,它会自动添加到项目文件中。您可以选择指定一个 活跃的 Dev Hub 组织用户接收 Apex gacks 的电子邮件通知,并安装, 升级或卸载与程序包关联的失败。

sf package create --name "Expenser App" --package-type Unlocked --path  \
"expenser-main" --target-dev-hub my-hub --error-notification-username me@devhub.org

输出与此示例类似。

sfdx-project.json has been updated.
Successfully created a package. 0HoB00000004CzHKAU
=== Ids
NAME        VALUE
──────────  ──────────────────
Package Id  0HoB00000004CzHKAU

更新程序包

要更新名称、描述或用户以接收 现有包,请使用此 命令。

sf package update --package "Expense App" --name "Expense Manager App" \
--description "New Description" --error-notification-username me2@devhub.org

注意

你 创建 包。

创建已解锁包的新版本

包版本是包内容和相关元数据的固定快照。 通过包版本,您可以管理更改并跟踪每次发布时的不同之处 或部署一组特定的更改。

在创建包版本之前,请先验证包详细信息,例如包 sfdx-project.json 文件中的名称、依赖项以及主要版本号、次要版本号和修补程序版本号。验证所需的元数据 更改或添加新的包版本位于包的主目录中。

我每天可以创建多少个包版本?

运行此命令以查看每天可以创建多少个包版本以及有多少个 你还剩下。

sf limits api display

查找 Package2VersionCreates 条目。

NAME                                   REMAINING  MAXIMUM
─────────────────────────────────────  ─────────  ─────────
Package2VersionCreates                  23         50

创建包版本

使用此命令创建包版本。指定软件包别名或 ID (0Ho)。 还可以包括一个临时定义文件,该文件包含特征列表和 设置包版本所依赖的元数据。

sf package version create --package "Expenser App" --installation-key “HIF83kS8kS7C” \
--definitionfile config/project-scratch-def.json --wait 10

注意

创建包版本时,请指定在非异步模式下运行命令的时间。如果 在该时间内创建包版本时,sfdx-project.json 文件会自动更新为 包版本信息。否则,必须手动编辑项目文件。–wait

创建包版本可能是一个长时间运行的过程,具体取决于 包大小和其他变量。您可以轻松查看状态和监控 进展。

sf package version create report --package-create-request-id 08cxx00000000YDAAY

输出显示有关请求的详细信息。

=== Package Version Create Request 
NAME                            VALUE
─────────────────────────────   ────────────────────
Version Create Request Id       08cB00000004CBxIAM 
Status                          InProgress 
Package Id                      0HoB00000004C9hKAE 
Package Version Id              05iB0000000CaaNIAS
Subscriber Package Version Id   04tB0000000NOimIAG
Tag                             git commit id 08dcfsdf
Branch 
CreatedDate                     2018-05-08 09:48
Installation URL
https://login.salesforce.com/packaging/installPackage.apexp?p0=04tB0000000NOimIAG

您可以在 的初始输出中找到请求 ID (08c)。sf package version create

根据包的大小和其他变量,创建请求可以采用 几分钟。当有多个待处理的创建包请求时 版本,您可以使用此命令查看所有请求的列表。

sf package version create list --created-last-days 0

显示每个请求的详细信息,如下所示(ID 和标签被截断)。

=== Package Version Create Requests [3] 
ID     STATUS  PACKAGE2 ID PKG2 VERSION ID SUB PKG2 VER ID TAG BRANCH CREATED DATE === 
08c... Error   0Ho...      
08c... Success 0Ho... 05i... 04t...                                   2017-06-22 12:07 
08c... Success 0Ho... 05i... 04t...                                   2017-06-23 14:55

使用关键字 NEXT 确保包版本号是唯一的

若要确保版本号是唯一的,请在 sfdx-project.json 文件中设置版本号时使用关键字 NEXT。

例如。“versionNumber”: “1.2.0.NEXT”

如果您不使用 NEXT,并且您也忘记更新版本 sfdx-project.json 文件中的数字,即新的包版本 使用与以前的包版本相同的编号。虽然我们不强制执行 包版本号的唯一性,每个包版本都分配了一个唯一的 订阅者包版本 ID(以 04t 开头)。

  • 通过创建和指定组织配置
    来简化未锁定的包开发 如果包的元数据依赖于一组复杂的功能、设置或许可证,则很难在临时组织定义文件中以声明方式指定这些依赖项。相反,请创建生产组织或其他开发组织的组织形状,并在临时组织定义文件中指定该源组织的 ID。在包创建过程中,我们会在构建和验证包的元数据时模拟源组织的环境。
  • 在未锁定的打包中使用分支 在源代码管理系统 (SCS)
    中使用分支的开发团队通常会根据特定代码分支中的元数据生成包版本。
  • 跳过验证以快速迭代未锁定的包开发 通过在包版本创建期间跳过对依赖项、包祖先和元数据的验证,更高效地迭代包开发
    。跳过验证可减少创建新包版本所需的时间,但只能将已验证的包版本提升为已发布状态。
  • 在 Salesforce 版本转换期间,为解锁的包定位特定版本
    在主要的 Salesforce 版本转换期间,您可以指定 或 在创建包版本时。通过指定软件包的发布版本,您可以测试即将推出的功能、运行回归测试并为客户提供支持,而不管他们的组织使用的是哪个 Salesforce 版本。以前,您只能创建与您的 Dev Hub 组织所在的 Salesforce 版本相匹配的软件包版本。previewprevious

通过创建和指定组织形状来简化解锁包开发

如果包的元数据依赖于一组复杂的功能, 设置或许可证,可能很难在 临时组织定义文件。相反,请创建生产组织的组织形状或其他组织形状 development org,并在临时组织定义文件中指定该源组织的 ID。在 包创建时,我们会在构建和验证 包的元数据。

在使用此功能之前,请熟悉 Org Shape for Scratch Orgs 的工作原理。

然后在源组织中启用临时组织设置,生成组织形状,然后 编辑临时组织定义文件以包含组织名称和 15 个字符的源组织 同上。

{
  "orgName": "Acme",
  "sourceOrg": "00DB1230400Ifx5"
}

在解锁的包装中使用分支

在源代码管理系统 (SCS) 中使用分支的开发团队,通常 基于特定代码分支中的元数据生成包版本。

若要确定包版本基于 SCS 中的哪个分支,请标记包版本 与分支名称一起使用属性 Salesforce CLI 命令。–branch

sf package version create –branch featureA

您可以指定任何字母数字值(最多 240 个字符)作为分支名称。

您还可以在 sfdx-project.json 文件的包目录部分中指定分支名称。

"packageDirectories": [
     {
        "path": "util",
        "default": true,
        "package": "pkgA",
        "versionName": "Spring ‘21",
        "versionNumber": "4.7.0.NEXT",
        "branch": "featureA"
     }]

指定分支时,该包版本的包别名会自动 附加分支名称。您可以在 sfdx.project.json 文件中查看包别名。

"packageAliases": {
    "pkgA@1.0.0.4-featureA":"04tB0000000IB1EIAW"}

请记住,版本号在每个分支内递增,而不是在分支之间递增。为 例如,可以有两个或多个版本号为 1.3.0.1 的 beta 包版本。

分行名称包版本别名
特征ApkgA@1.3.0-1-功能A
特征BpkgA@1.3.0-1-功能B
未指定pkgA@1.3.0-1

尽管多个 beta 包版本可以具有相同的版本号,但可以有 对于给定的 major.minor.patch 软件包版本,只有一个已提升和发布的软件包版本。

包依赖项和分支

默认情况下,您的包可以依赖于同一分支中的其他包。为 基于其他分支中的包依赖,在 sfdx.project.json 文件。

指定包依赖关系使用此格式
使用 branch 属性"dependencies": [ { "package": "pkgB", "versionNumber": "1.3.0.LATEST", "branch": "featureC" }]
使用最新提升和发布的包版本"dependencies": [ { "package": "pkgB", "versionNumber": "2.1.0.RELEASED" }]
如果您的包具有关联的分支,但依赖包没有 分支"dependencies": [ { "package": "pkgB", "versionNumber": "1.3.0.LATEST", "branch": "" }]
使用包别名"dependencies": [ { "package": "pkgB@2.1.0-1-featureC" }]

跳过验证,快速迭代解锁包开发

通过跳过依赖项的验证,更高效地迭代包开发, 包上级,以及包版本创建期间的元数据。跳过验证会减少 创建新的包版本所需的时间,但只能升级已验证的包版本 设置为释放状态。

sf package version create --skip-validation

在工具 API 中,使用 Package2VersionCreateRequest 对象上的 SkipValidation 字段。

注意

不能同时指定跳过验证和代码覆盖率,因为代码覆盖率是 在验证期间计算。

在 Salesforce 版本转换期间,为已解锁的软件包定位特定版本

在主要的 Salesforce 版本转换期间,您可以指定或何时 创建包版本。通过指定包的发布版本,可以进行测试 即将推出的功能,运行回归测试,并为客户提供支持,无论使用哪种 Salesforce 释放他们的组织已开启。以前,您只能创建与 Salesforce 发布您的开发人员中心组织。

previewprevious要基于预览版或以前的 Salesforce 发行版创建包版本,请创建 一个临时组织定义文件,其中包括:

{
    "release": "previous"
}

{
    "release": "preview"
}

在 sfdx-project.json 文件中,将 设置为与包版本的发布版本相对应 创建。如果以以前的版本为目标,则接受低于当前版本的任何值。sourceApiVersionsourceApiVersion然后,在创建软件包版本时,指定临时组织定义 文件。

sf package version create --package pkgA --definition-file config/project-scratch-def.json

预览开始日期是升级沙盒实例的时间。预览结束日期是所有 实例位于 GA 版本上。

解锁包的代码覆盖率

在升级和发布未锁定的软件包之前,Apex 代码必须满足 最低 75% 的代码覆盖率要求。可以安装不符合代码的包版本 仅在临时组织和沙盒中的覆盖率要求。

重要

之前已提升为已发布状态的已解锁包版本 Winter ’21 不受代码覆盖率要求的约束。

要使用 Salesforce CLI 计算代码覆盖率,请在运行命令时使用该参数。–code-coveragesf package version create

在计算代码覆盖率时,包版本创建可能需要更长的时间才能完成,因此 考虑在开发周期中何时包含代码覆盖率参数。您可以选择 跳过代码覆盖率,并且可以通过指定参数来跳过所有验证。您可以升级包版本 仅当它们经过验证并满足代码覆盖率要求时。–skip-validation

查看包版本的代码覆盖率信息,使用参数或 Salesforce 命令行界面。sf package version list –verbosesf package version report

我们不会计算依赖于组织的解锁包的代码覆盖率。

释放解锁的软件包

每个新的软件包版本在创建时都标记为 beta。当您开发您的 package,在创建准备好的版本之前,可以创建多个包版本 在生产组织中发布和安装。

在升级包版本之前,请确保在 Dev 中启用了用户权限“将包版本提升为已发布” 与包关联的中心组织。请考虑使用此用户创建权限集 权限,然后将权限集分配给相应的用户配置文件。

当您准备好发布时,请使用 .sf package version promote

sf package version promote --package "Expense Manager@1.3.0-7"

如果命令成功,则会显示一条确认消息。

Successfully promoted the package version, ID: 04tB0000000719qIAA to released.

更新成功后,查看包详细信息。

sf package version report --package "Expense Manager@1.3.0.7"

确认 Released 属性的值为 。true

=== Package Version
NAME                            VALUE
──────────────────────────────  ───────────────────
Name                            ver 1.0
Alias                           Expense Manager-1.0.0.5
Package Version Id              05iB0000000CaahIAC
Package Id                      0HoB0000000CabmKAC
Subscriber Package Version Id   04tB0000000NPbBIAW
Version                         1.0.0.5
Description                     update version
Branch
Tag                             git commit id 08dcfsdf
Released                        true
Created Date                    2018-05-08 09:48
Installation URL
https://login.salesforce.com/packaging/installPackage.apexp?p0=04tB0000000NPbBIAW

你 对于每个包版本号,只能升级和发布一次,并且无法撤消 此更改。

更新已解锁的软件包版本

您可以从命令行更新包版本的大多数属性。例如 您可以更改包版本名称或说明。一个重要的例外是你不能 更改发布状态。

如果已发布最新的软件包版本,请递增主要版本、次要版本或 您创建的下一个软件包版本的修补程序版本号。

软件包版本号使用格式 major.minor.patch.build。例如,如果您发布了 软件包 1.0.0.2,您可以使用 1.1.0.0、2.0.0.0 或 1.0.1.0 作为下一个软件包版本。

未锁定软件包中硬删除的组件

当这些组件从未锁定的包中删除时,它们将从 软件包升级期间的目标安装组织。

  • AccountForecastSettings
  • AcctMgrTargetSettings
  • ActionableListDefinition
  • ActionPlanTemplate
  • AccountingFieldMapping
  • AccountingModelConfig
  • AdvAccountForecastSet
  • AdvAcctForecastDimSource
  • AdvAcctForecastPeriodGroup
  • AIApplicationConfig
  • AIUsecaseDefinition
  • AnalyticSnapshot
  • ApexClass
  • ApexComponent
  • ApexPage
  • ApexTrigger
  • ApplicationRecordTypeConfig
  • ApplicationSubtypeDefinition
  • AppointmentAssignmentPolicy
  • AssessmentQuestion
  • AssessmentQuestionSet
  • AssistantContextItem
  • AssistantSkillQuickAction
  • AssistantSkillSobjectAction
  • AssistantVersion
  • AuraDefinitionBundle
  • BatchCalcJobDefinition
  • BatchProcessJobDefinition
  • BenefitAction
  • BldgEnrgyIntensityCnfg
  • BrandingSet
  • BriefcaseDefinition
  • BusinessProcessGroup
  • BusinessProcessTypeDefinition
  • CareBenefitVerifySettings
  • CareLimitType
  • CareProviderSearchConfig
  • CareRequestConfiguration
  • ChannelObjectLinkingRule
  • ClaimFinancialSettings
  • ClauseCatgConfiguration
  • CompactLayout
  • ContractType
  • ConversationVendorInfo
  • CustomApplication
  • CustomPageWebLink
  • CustomPermission
  • CustomTab
  • Dashboard
  • DecisionMatrixDefinition
  • DecisionMatrixDefinitionVersion
  • DecisionTable
  • DecisionTableDatasetLink
  • DisclosureDefinition
  • DisclosureDefinitionVersion
  • DisclosureType
  • DiscoveryAIModel
  • DiscoveryGoal
  • Document
  • DocumentGenerationSetting
  • DocumentType
  • EmailServicesFunction
  • EmailTemplate
  • EmbeddedServiceBranding
  • EmbeddedServiceConfig
  • EmbeddedServiceLiveAgent
  • EmbeddedServiceMenuSettings
  • ESignatureConfig
  • ESignatureEnvelopeConfig
  • ExplainabilityActionDefinition
  • ExplainabilityActionVersion
  • ExplainabilityMsgTemplate
  • ExpressionSetDefinition
  • ExpressionSetDefinitionVersion
  • ExpressionSetObjectAlias
  • ExternalAIModel
  • ExternalClientApplication
  • ExtlClntAppMobileSettings
  • ExtlClntAppOauthSettings
  • ExternalDataSrcDescriptor
  • ExternalServiceRegistration
  • FeatureParameterBoolean
  • FeatureParameterDate
  • FeatureParameterInteger
  • FieldRestrictionRule
  • FieldServiceMobileExtension
  • FlexiPage
  • FuelType
  • FuelTypeSustnUom
  • GatewayProviderPaymentMethodType
  • HomePageComponent
  • HomePageLayout
  • IdentityVerificationProcDef
  • InstalledPackage
  • IntegrationHubSettings
  • IntegrationHubSettingsType
  • IntegrationProviderDef
  • Layout
  • Letterhead
  • LicenseDefinition
  • LightningComponentBundle
  • LightningExperienceTheme
  • LightningMessageChannel
  • LightningOnboardingConfig
  • ListView
  • LiveChatAgentConfig
  • LiveChatButton
  • LiveChatSensitiveDataRule
  • LocationUse
  • LoyaltyProgramSetup
  • MarketingAppExtActivity
  • MarketingAppExtension
  • MatchingRule
  • MfgProgramTemplate
  • MLDataDefinition
  • MLPredictionDefinition
  • NamedCredential
  • NetworkBranding
  • ObjectHierarchyRelationship
  • OcrSampleDocument
  • OcrTemplate
  • OmniDataTransform
  • OmniIntegrationProcedure
  • OmniScript
  • OmniUiCard
  • PaymentGatewayProvider
  • PermissionSet
  • PermissionSetGroup
  • PermissionSetLicense
  • PipelineInspMetricConfig
  • PlatformEventSubscriberConfig
  • ProductAttributeSet
  • ProductSpecificationTypeDefinition
  • Profile
  • QuickAction
  • RecordAlertCategory
  • RecordAlertDataSource
  • RegisteredExternalService
  • RelatedRecordAssocCriteria
  • RelationshipGraphDefinition
  • RemoteSiteSetting
  • Report
  • ReportType
  • RestrictionRule
  • SalesAgreementSettings
  • SchedulingRule
  • SchedulingObjective
  • ScoreCategory
  • ServiceAISetupDefinition
  • ServiceAISetupField
  • ServiceProcess
  • SharingReason
  • SharingRecalculation
  • SlackApp
  • StaticResource
  • StnryAssetEnvSrcCnfg
  • SustainabilityUom
  • SustnUomConversion
  • SvcCatalogCategory
  • SvcCatalogFulfillmentFlow
  • SvcCatalogItemDef
  • TimelineObjectDefinition
  • UIObjectRelationConfig
  • UserAccessPolicy
  • UserLicense
  • UserProfileSearchScope
  • ValidationRule
  • VehicleAssetEmssnSrcCnfg
  • ViewDefinition
  • VirtualVisitConfig
  • WaveApplication
  • WaveComponent
  • WaveDashboard
  • WaveDataflow
  • WaveDataset
  • WaveLens
  • WaveRecipe
  • WaveTemplateBundle
  • WaveXmd
  • WebLink
  • WebStoreTemplate
  • WorkflowAlert
  • WorkflowFieldUpdate
  • WorkflowFlowAction
  • WorkflowOutboundMessage
  • WorkflowRule
  • WorkflowTask

删除未锁定的软件包或软件包版本

使用 和 删除包和包版本 你不再需要了。

sf package version deletesf package delete

若要删除包或包版本,用户需要“删除第二代包”用户 许可。在删除包之前,请先删除所有关联的包版本。

包装类型我可以删除测试版软件包和软件包版本吗?我可以删除已发布的软件包和软件包版本吗?
第二代托管软件包是的
解锁套餐是的是的

删除包或包版本的注意事项

  • 删除是永久性的。
  • 尝试安装已删除的软件包版本将失败。
  • 在删除之前,请确保包或包版本未被引用为 屬地。

例子:

$ sf package delete -p "Your Package Alias"
$ sf package delete -p 0Ho...
$ sf package version delete -p "Your Package Version Alias"
$ sf package version delete -p 04t...

这些 CLI 命令不能用于第一代托管包或包版本。 若要删除第一代托管包,请参阅第一代托管打包开发人员中的查看包详细信息 指南。

查看软件包详细信息

从命令查看以前创建的包和包版本的详细信息 线。若要显示开发人员中心组织中所有包的列表,请使用此命令。

sf package list --target-dev-hub my-hub

可以在输出中查看命名空间、包名称、ID 和其他详细信息。

Name              Id                  Alias           Description  Type
───────────────   ──────────────────  ──────────────  ───────────  ───────────  ───────
Expenser App      0HoB00000004CzRKAU  Expenser App                 Unlocked
Expenser Logic    0HoB00000004CzMKAU  Expenser Logic               Unlocked
Expenser Schema   0HoB00000004CzHKAU  Expenser Schema              Unlocked

包括可选参数以根据修改日期筛选列表结果, 创建日期,并按特定字段或包 ID 排序。要限制详细信息,请使用 .要显示展开的详细信息,请使用 。–concise–verbose

若要显示开发人员中心组织中所有包版本的列表,请使用此命令。

sf package version list --target-dev-hub my-hub

您可以在输出中查看命名空间、版本名称和其他详细信息。

Package Name      Namespace  Version  Sub Pkg Ver Id       Alias                    Installation Key  Released  
───────────────  ──────────  ───────  ───────────────────  ───────────────────────  ─────────────────  ───────
Expenser Schema              0.1.0.1  04tB0000000719qIAA   Expenser Schema@0.1.0-1   false             true
Expenser Schema              0.2.0.1  04tB000000071AjIAI   Expenser Schema@0.2.0-1   false             true
Expenser Schema              0.3.0.1  04tB000000071AtIAI   Expenser Schema@0.3.0-1   false             false
Expenser Schema              0.3.0.2  04tB000000071AyIAI   Expenser Schema@0.3.0-2   false             true
Expenser Schema              0.3.1.1  04tB0000000KGU6IAO   Expenser Schema@0.3.1-1   false             false
Expenser Schema              0.3.1.2  04tB0000000KGUBIA4   Expenser Schema@0.3.1-2   false             true
Expenser Schema              0.3.2.1  04tB0000000KGUQIA4   Expenser Schema@0.3.2-1   false             true
Expenser Logic               0.1.0.1  04tB0000000719vIAA   Expenser Logic@0.1.0-1    false             true
Expenser App                 0.1.0.1  04tB000000071A0IAI   Expenser App@0.1.0-1      false             true

为未锁定的软件包推送软件包升级

通过推送升级,您可以升级订阅者组织中安装的软件包,而无需 要求客户自行安装升级。您可以选择接收推送的组织 upgrade、包升级到的版本以及您希望何时进行升级。推 升级特别有用:如果您需要推送更改以修复热错误。

使用 SOAP API 启动推送升级、跟踪每个作业的状态并查看错误 消息,如果任何推送升级失败。以下是有助于推送升级的对象。

为此,请执行以下操作:使用此对象:
检索有关包版本的详细信息。MetadataPackageVersion肥皂 应用程序接口
检索有关订阅者组织的信息,例如组织 ID 和软件包 当前安装的版本。PackageSubscriber(包订阅者) 肥皂 应用程序接口
计划推送升级,或检查推送升级的状态。PackagePushRequest 肥皂 应用程序接口
指定要接收推送升级的组织。创建单独的包推送作业 接收推送升级的每个组织。PackagePushJob(包推送作业)SOAP API
查看与推送升级请求关联的任何错误消息。PackagePushError肥皂 应用程序接口

已解锁软件包的推送升级注意事项

  • 您可以包含新功能和更改的功能,也可以在推送升级期间删除功能。
  • 安装推送升级时,将遵守软件包中的 Apex。
  • 即使包版本需要密码,也可以使用推送升级。

安装解锁的软件包

使用 CLI 或浏览器安装未锁定的软件包。您可以安装软件包版本 在临时组织、沙盒组织、DE 组织或生产组织中。

  • 使用 CLI
    安装软件包 如果您使用的是 Salesforce CLI,则可以使用该命令在临时组织或目标订阅者组织中安装软件包。sf package install
  • 从 URL
    安装未锁定的软件包 从 CLI 或浏览器安装未锁定的软件包,类似于安装托管软件包的方式。
  • 升级已解锁包
    的版本 是否要对现有包进行元数据更改?您可以使用 CLI 将一个软件包版本升级到另一个软件包版本。
  • 用于安装具有依赖项的未锁定包的示例脚本
    使用此示例脚本作为创建自己的脚本的基础,以安装具有依赖项的包。此脚本包含一个查询,用于查找依赖包并按正确的依赖顺序安装它们。

使用 CLI 安装软件包

如果您使用的是 Salesforce CLI,则可以使用该命令在临时组织或目标订阅者中安装软件包 组织。

sf package install

在将软件包安装到临时组织之前,请运行此命令以列出所有软件包和 找到 ID 或包别名。

sf package version list

确定要安装的版本。输入此命令,提供软件包别名或 程序包 ID(以 04t 开头)。

sf package install --package "Expense Manager@1.2.0-12" --target-org jdoe@example.com

如果您已使用默认用户名设置了临时组织,请仅输入软件包版本 同上。

sf package install --package "Expense Manager@1.2.0-12"

注意

如果您定义了别名(使用参数),则 可以指定 的别名而不是用户名。-a–target-org

CLI 显示有关安装的状态消息。

Waiting for the subscriber package version install request to get processed. Status = InProgress Successfully installed the subscriber package version: 04txx0000000FIuAAM.

控制包安装超时

当您发出命令时,它需要 几分钟后,软件包版本将在目标组织中可用,并安装到 完成。要留出足够的时间成功安装,请使用以下参数表示 互斥计时器。sf package install

  • –publish-wait定义 该命令等待软件包版本在目标组织中可用。默认值为 0。 如果在此时间范围内该软件包在目标组织中不可用,则安装是 终止。当您 创建新的包版本,然后立即尝试将其安装到目标 组织。–publish-wait注意如果设置为 0,则包 安装会立即失败,除非软件包版本在目标中已可用 组织。–publish-wait
  • –wait定义 命令在软件包可用后等待安装完成。默认值为 0. 间隔结束时,install 命令 完成,但安装将继续,直到失败或成功。您可以轮询 使用 的安装状态。–waitsf package install report注意计时器在以下时间后生效 指定的时间已过。如果时间间隔在包 在目标组织中可用,间隔从不 开始。–wait–publish-wait–publish-wait–wait

例如,考虑一个名为 Expense Manager 的包,它需要 5 分钟才能变成 在目标组织上可用,安装时间为 11 分钟。以下命令已设置为 3 分钟和 10 分钟。由于 Expense Manager 需要的时间超过设置的时间间隔,因此安装将在 三分钟间隔结束。

publish-waitwaitpublish-waitpublish-wait

sf package install --package "Expense Manager@1.2.0-12" --publish-wait 3 --wait 10

这 以下命令已设置为 6 分钟,并设置为 10 分钟。如果尚不可用,则费用 Manager 需要 5 分钟才能在目标组织上可用。然后时钟开始滴答作响 10分钟的时间。在 10 分钟结束时, 命令完成,因为时间间隔具有 已过,但安装尚未完成。此时,表示安装已在 进展。再过一分钟,安装完成并指示成功 安装。

publish-waitwaitwaitwaitsf package install reportsf package install report

sf package install --package "Expense Manager@1.2.0-12" --publish-wait 6 --wait 10

从 URL 安装未锁定的软件包

从 CLI 或浏览器安装未锁定的软件包,类似于安装方式 托管包。

如果从 CLI 创建软件包,则可以派生 通过将订阅者包 ID 添加到开发人员中心 URL 来包。您可以使用此 URL 进行测试 不同的部署或安装方案。

例如,如果包版本具有 订阅者包 ID 04tB00000009oZ3JBI,将 ID 添加为 apvId。https:// 我的域名.lightning.force.com/packagingSetupUI/ipLanding.app?apvId=04tB00000009oZ3JBI

任何人 使用 URL 和 Salesforce 组织的有效登录名可以安装软件包。要安装软件包,请执行以下操作:

  1. 在浏览器中,输入安装 URL。
  2. 输入要在其中安装 包,然后单击“登录”。
  3. 如果软件包受安装密钥保护,请输入安装密钥。
  4. 对于默认安装,请单击“安装”。一条消息描述了 进展。安装完成后,您会收到一条确认消息。

升级已解锁软件包的版本

是否要对现有包进行元数据更改?您可以使用 CLI 执行以下操作 将一个软件包版本升级到另一个软件包版本。

执行包升级时,以下是元数据更改的预期内容。

升级到新的包版本时,可以选择是否要求成功 编译组织和包中的所有 Apex (),或仅编译包中的 Apex ()。–apex-compile all–apex-compile package

  • 新版本中引入的元数据将作为升级的一部分进行安装。
  • 如果升级后的组件与目标组织中已有的组件具有相同的 API 名称, 组件将被更改覆盖。
  • 如果升级中的组件已从目标组织中删除,则会重新创建该组件 在升级期间。
  • 在新软件包版本中删除的元数据也会从目标组织中删除 作为升级的一部分。已删除的元数据是当前包中未包含的元数据 版本安装,但存在于目标组织中安装的先前软件包版本中。如果 在升级发生之前删除元数据,升级将正常进行。一些例子 其中元数据已弃用且未删除:
    • 用户在自定义对象和字段中输入的数据将被弃用,并且不会被删除。管理员 如有必要,可以导出此类数据。
    • 不推荐使用 Apex 类之类的对象,如果在 作为软件包一部分的 Lightning 组件。
  • 在 API 版本 45.0 及更高版本(Salesforce CLI 版本 45.0.9 或更高版本)中,您可以指定 在软件包升级期间删除的元数据会发生什么情况。使用命令的 | 参数,指定以下值之一:sf package install-t–upgrade-type
    • Delete指定删除所有已删除的内容 组件,但自定义对象和自定义字段除外,没有 依赖。
    • DeprecateOnly指定所有删除 组件必须标记为已弃用。已删除的元数据存在于目标组织中 包升级后,但在 UI 中显示为包中已弃用。这 选项在将元数据从一个包迁移到另一个包时很有用。
    • Mixed(默认值)指定某些已删除 组件将被删除,其他组件将被标记为已弃用。更多信息 在硬删除的组件上,请参阅未锁定包中的硬删除组件。

注意

对于软件包安装到生产组织或任何启用了 Apex Compile on Deploy 的组织, 平台在软件包安装或升级操作后编译组织中的所有 Apex 完成。此方法可确保软件包安装和升级不会影响 组织的性能,即使指定了,也会完成。–apex-compile package

用于安装具有依赖项的未锁定包的示例脚本

使用此示例脚本作为创建自己的脚本的基础,以使用 依赖。此脚本包含一个查询,用于查找依赖包并安装它们 以正确的依赖顺序。

示例脚本

注意

请务必将软件包版本 ID 和临时组织用户名替换为您自己的用户名 具体细节。

#!/bin/bash


# The execution of this script stops if a command or pipeline has an error.

# For example, failure to install a dependent package will cause the script

# to stop execution.

set -e


# Specify a package version id (starts with 04t)

# If you know the package alias but not the id, use sf package version list to find it.

PACKAGE=04tB0000000NmnHIAS


# Specify the user name of the subscriber org.

USER_NAME=test-bvdfz3m9tqdf@example.com


# Specify the timeout in minutes for package installation.

WAIT_TIME=15


echo "Retrieving dependencies for package Id: "$PACKAGE


# Execute soql query to retrieve package dependencies in json format.

RESULT_JSON=`sf data query -u $USER_NAME -t -q "SELECT Dependencies FROM SubscriberPackageVersion WHERE Id='$PACKAGE'" --json`


# Parse the json string using python to test whether the result json contains a list of ids or not.

DEPENDENCIES=`echo $RESULT_JSON | python -c 'import sys, json; print json.load(sys.stdin)["result"]["records"][0]["Dependencies"]'`


# If the parsed dependencies is None, the package has no dependencies. Otherwise, parse the result into a list of ids.

# Then loop through the ids to install each of the dependent packages.

if [[ "$DEPENDENCIES" != 'None' ]]; then


    DEPENDENCIES=`echo $RESULT_JSON | python -c '

import sys, json

ids = json.load(sys.stdin)["result"]["records"][0]["Dependencies"]["ids"]

dependencies = []

for id in ids:

    dependencies.append(id["subscriberPackageVersionId"])

print " ".join(dependencies)

'` 


    echo "The package you are installing depends on these packages (in correct dependency order): "$DEPENDENCIES

    for id in $DEPENDENCIES

    do

        echo "Installing dependent package: "$id

        sf package install --package $id -u $USER_NAME -w $WAIT_TIME --publish-wait 10

    done


else

    echo "The package has no dependencies"


fi


# After processing the dependencies, proceed to install the specified package.

echo "Installing package: "$PACKAGE

sf package install --package $PACKAGE -u $USER_NAME -w $WAIT_TIME --publish-wait 10


exit 0;

从未锁定的包中迁移已弃用的元数据

您可以弃用未锁定包中的元数据,将该元数据移动到新包中, ,然后在生产组织中安装新软件包。

创建更多解锁包时,可以重构包并将元数据从 如有必要,一个已解锁的包到另一个已解锁的包。

若要将生产元数据从包 A 移动到包 B,请按照下列步骤操作。

  1. 确定要从包 A 移动到包 B 的元数据。
  2. 从包 A 中删除元数据,创建版本,然后发布包。
  3. 将元数据添加到包 B,创建版本,然后发布包。
  4. 在生产组织中,升级软件包 A。
  5. 在生产组织中,安装软件包 B。

元数据现在是生产组织中包 B 的一部分。

卸载已解锁的软件包

您可以使用 Salesforce CLI 或从设置 UI 从组织中卸载软件包。什么时候 卸载未锁定的软件包,软件包中的所有组件都将从 组织。要使用 CLI 从目标组织卸载包,请授权 Dev Hub 组织并运行 这 命令。

sf package uninstall --package "Expense Manager@2.3.0-5"

您还可以从 Web 浏览器卸载软件包。打开您 已安装软件包。

sf org open -u me@my.org

然后 卸载软件包。

  1. 在“设置”中,输入“快速查找”框,然后 选择已安装的软件包Installed Packages
  2. 单击要删除的软件包旁边的“卸载”。
  3. 确定是否保存和导出包数据的副本,然后选择 相应的单选按钮。
  4. 选择“是,我想卸载”,然后单击“卸载”。

卸载软件包的注意事项

  • 如果要卸载包含自定义对象的包,则该包上的所有组件 自定义对象也会被删除。已删除的项目包括自定义字段、验证规则、 自定义按钮和链接、工作流规则和审批流程。
  • 每当卸载中未包含的组件时,都无法卸载软件包 引用包中的任何组件。例如:
    • 当已安装的软件包包含标准对象上的任何组件时,另一个 组件引用时,Salesforce 会阻止您卸载软件包。一 示例是一个包,其中包含一个自定义用户字段,该字段具有获取 当该字段的值为特定值时触发。卸载软件包 会阻止您的工作流程工作。
    • 安装两个不相关的包后,每个包都包含一个自定义对象和 一个自定义对象组件引用另一个组件中的组件,则无法卸载 包。例如,如果安装包含自定义的支出报表应用 user 字段,并在另一个已安装的自定义对象上创建验证规则,该对象 引用该自定义用户字段。但是,卸载支出报表应用 阻止验证规则起作用。
    • 当已安装的文件夹包含安装后添加的组件时, Salesforce 会阻止您卸载软件包。
    • 当您在以下时间添加的电子邮件模板中使用已安装的信笺抬头时 安装时,Salesforce 会阻止您卸载软件包。
    • 当已安装的软件包包含 Einstein 引用的自定义字段时 Prediction Builder 或 Case Classification,Salesforce 会阻止您卸载 包。在卸载包之前,请在“预测”中编辑预测 生成器或案例分类,使其不再引用自定义字段。
  • 无法卸载删除所有活动企业和个人帐户记录的软件包 类型。激活至少一种其他企业或个人帐户记录类型,然后尝试 再。
  • 如果后台作业正在更新由 包,例如对汇总摘要字段的更新。等到后台作业 完成,然后重试。

将解锁的包转移到其他开发人员中心

可以将已解锁包的所有权从一个开发人员中心组织转移到 另一个。

注意

此包转移功能仅适用于已解锁的包和第二代包 托管包。开发人员中心组织不与第一代托管包或非托管包一起使用 包,因此此功能不适用于这些包类型。

请求将包转移到其他开发人员中心

首先向 Salesforce 客户支持记录案例,并提供以下内容 详:

主题: 解锁的包传输到其他开发人员中心

描述:

在说明中,列出:

  • 要传输的包的订阅者包 ID。此 ID 以 033 开头。自 验证包的 033 ID,在源上运行带有标志的命令 Dev Hub 组织。sf package list -–verbose
  • 源组织的 Dev Hub 组织 ID。
  • 目标组织的 Dev Hub 组织 ID。目标开发人员中心组织不能是开发人员 版本组织或试用组织。
  • (可选)要传输的包的命名空间。如果包是无命名空间 解锁包,请跳过此步骤。
  • 确认你已查看并完成了准备 Transfer Your Package 部分,包括将命名空间链接到目标 Dev Hub,并清除 Apex 错误通知用户。

如果您要转移多个包裹,请为每个包裹单独提交案例。

在您的案例通过审核和批准后,Salesforce 客户支持人员将 与您联系以安排启动包裹转移的时间。

注意

出于安全原因,包在位于政府云中的开发人员中心和 不允许使用位于政府云外部的 Dev Hub。

准备转移您的包裹

以下是您如何帮助确保包裹顺利转移的方法。

  • 如果要传输的包具有命名空间,请将命名空间链接到源 开发人员中心。在包传输之前,命名空间必须链接到 源和目标开发人员中心组织。
  • 在启动包传输过程之前,请确保所有推送升级或包 版本创建过程已完成。
  • 删除不再需要的包版本。
  • 如果指定,请使用命令清除包的错误通知用户。如果 你要将包转移到你拥有的开发人员中心组织,可以设置错误通知 包传输完成后,用户到目标开发人员中心中的用户。注意: 指定无值 在等号清除任何以前设置的用户名后。sf package update –error-notification-username=–error-notification-username=

在包裹转移过程中

在包之前,必须完成所有推送升级或包版本创建过程 传输过程已启动。Salesforce 客户支持将提醒您 将进行包裹转移。

包裹转移完成后

运行并验证包是否为否 与开发人员中心关联的时间更长。sf package list

包传输对包 ID 的影响

ID 类型ID 以 开头包裹转移完成后…
订阅者程序包 ID033此 ID 保持不变。
订阅者包版本 ID246此 ID 保持不变。
程序包 ID0Ho传输的包将收到一个新的唯一包 ID。

更新包项目文件

在开发人员中心创建新包或包版本之前,请更新 sfdx-project.json 文件并删除对传输的所有引用 package 从“package 目录”和“package alias”部分。

如果开发人员中心中有依赖于要传输的包的包,If you have packages in your Dev Hub which depends on the package that you-inter-transfer, 将 sfdx-project.json 文件中的 Package Dependency 部分更新为 显式指定您所依赖的传输包的 04t ID。

例如,如果将 pkgA 传输到其他开发人员中心,并且 sfdx-project.json 文件列出了如下所示的包依赖项。

"dependencies": [ 
   {
      "package": "pkgA"
      "versionNumber": "2.0.0.LATEST"
   }
]

更新依赖项以指定 pkgA 的 04t ID。

"dependencies": [ 
   {
      "package": "04tB0000000UzH5IAK"
   }
]

或者使用包别名指定依赖项。

"dependencies": [ 
   {
      "package": "pkgA2.0.0-1"
   }
"packageAliases": {
     "pkgA2.0.0-1": "04tB0000000UzH5IAK"
}
]

传输的包裹历史记录是什么?

当一个包被转移时,所有包版本和所有血统都是 转移。升级路径不受影响。

无论包传输是在你拥有的两个 Dev Hub 组织之间进行的,还是 包已从外部传输到你不拥有的开发人员中心,我们将传输包版本 历史。

我们转让:

  • 包名称、命名空间、类型和 ID。一个例外是传输的包会得到一个 新的 0Ho ID。
  • 包版本信息。这包括运行时通常显示的所有信息 或命令。sf package version listsf package version report

我们不转让:

  • 推送升级历史记录。
  • 包版本创建请求。
  • 收到 Apex 和其他类型的错误通知的 Dev Hub 用户的用户名。 此可选用户是使用 设置的。–error-notification-username
  • 获取从其他开发人员中心
    转移的已解锁包的所有权 可以获取从其他 Dev Hug 组织转移的已解锁包的所有权。

获取从其他开发人员中心转移的已解锁包的所有权

您可以获得从另一个 Dev Hug 转移的解锁包的所有权 组织。

若要从开发人员中心组织启动包传输,请参阅将解锁的包传输到其他开发人员中心。

注意

出于安全原因,包在位于政府云中的开发人员中心和 不允许使用位于政府云外部的 Dev Hub。

接收包裹转移

将收到的包的命名空间链接到开发人员中心组织。请参阅将命名空间链接到 Dev Hub 组织 Salesforce DX 开发人员指南。如果包未与 命名空间,请跳过此步骤。

包裹转移完成后

包裹转移完成后,Salesforce 客户支持将通知您。

若要验证传输的包是否与开发人员中心关联,请运行 。sf package list

包传输对包 ID 的影响

ID 类型ID 以 开头包裹转移完成后…
订阅者程序包 ID033此 ID 保持不变。
订阅者包版本 ID246此 ID 保持不变。
程序包 ID0Ho传输的包将收到一个新的唯一包 ID。

更新包项目文件

打开并查看关联的 sfdx-project.json 文件的内容 与转移的包。

打开并查看与 转移的包裹。定义文件有助于在开发过程中设置临时组织。 使用参数指定定义 文件。–definition-file

如果包目录部分列出了未传输给您的其他包, 从 sfdx-project.json 文件中删除这些引用。

接下来,查看 sfdx-project.json 文件的包别名部分,然后 删除对与包无关的包别名的任何引用 转移。

更新传输的包的包别名,以指定其 0Ho 包 ID。

创建新的包版本之前

与创建新包版本的方式类似,必须更新 sfdx-project.json 文件并更新版本号。

指定 Dev Hub 用户接收有关未处理的 Apex 异常的电子邮件通知,以及 安装、升级或卸载与包关联的失败时,请运行该命令,然后使用该参数。sf package update–error-notification-username

传输的包裹历史记录是什么?

我们转让:

  • 包名称、命名空间、类型和 ID。一个例外是传输的包会得到一个 新的 0Ho ID。
  • 包版本信息。这包括运行时通常显示的所有信息 或命令。sf package version listsf package version report

我们不转让:

  • 推送升级历史记录。
  • 包版本创建请求。
  • 收到 Apex 和其他类型的错误的 Dev Hub 用户的用户名 通知。