Initial commit: AgentForceTest Salesforce DX project
This commit is contained in:
12
.forceignore
Normal file
12
.forceignore
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# List files or directories below to ignore them when running force:source:push, force:source:pull, and force:source:status
|
||||||
|
# More information: https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_exclude_source.htm
|
||||||
|
#
|
||||||
|
|
||||||
|
package.xml
|
||||||
|
|
||||||
|
# LWC configuration files
|
||||||
|
**/jsconfig.json
|
||||||
|
**/.eslintrc.json
|
||||||
|
|
||||||
|
# LWC Jest
|
||||||
|
**/__tests__/**
|
||||||
113
.github/copilot-instructions.md
vendored
Normal file
113
.github/copilot-instructions.md
vendored
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
# Copilot Instructions for AgentForceTest
|
||||||
|
|
||||||
|
## Project Overview
|
||||||
|
|
||||||
|
This is a **Salesforce DX project** (Agentforce) integrating Jira for project management. The codebase contains:
|
||||||
|
|
||||||
|
- **Apex classes** for backend logic (e.g., JiraIntegration.cls)
|
||||||
|
- **Lightning Web Components (LWC)** for UI (e.g., accountQuickCreate)
|
||||||
|
- **Custom Salesforce objects** (Project\_\_c with Budget, Start Date fields)
|
||||||
|
- **SFDX tooling** for deployment and testing
|
||||||
|
|
||||||
|
## Architecture & Key Components
|
||||||
|
|
||||||
|
### Project Structure
|
||||||
|
|
||||||
|
- `force-app/main/default/` - Core SFDX package directory
|
||||||
|
- `classes/` - Apex backend logic
|
||||||
|
- `lwc/` - Lightning Web Components (LWC)
|
||||||
|
- `objects/` - Custom Salesforce objects with metadata
|
||||||
|
- `tabs/`, `layouts/`, `flexipages/` - UI configuration
|
||||||
|
- `scripts/` - SOQL queries and Apex scripts for development
|
||||||
|
- `config/project-scratch-def.json` - Scratch org configuration
|
||||||
|
- `mdapiOut/` - Metadata API deployment artifacts
|
||||||
|
|
||||||
|
### Data Integration
|
||||||
|
|
||||||
|
- **JiraIntegration.cls** bridges Salesforce with Jira via REST API
|
||||||
|
- **Project\_\_c custom object** stores Salesforce-side project data (Budget, Start Date)
|
||||||
|
- Integration pattern: Account Quick Create → Project creation → Jira sync
|
||||||
|
|
||||||
|
## Development Workflows
|
||||||
|
|
||||||
|
### Code Quality & Linting
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run lint # Run ESLint on Aura/LWC JS files
|
||||||
|
eslint force-app/main/default/lwc/**/*.js --fix # Auto-fix with flat config
|
||||||
|
npm run prettier # Format all supported file types
|
||||||
|
npm run prettier:verify # Check formatting without changes
|
||||||
|
```
|
||||||
|
|
||||||
|
### Testing
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run test # Run all LWC unit tests
|
||||||
|
npm run test:unit:watch # Watch mode for TDD
|
||||||
|
npm run test:unit:debug # Debug mode
|
||||||
|
npm run test:unit:coverage # Coverage report
|
||||||
|
```
|
||||||
|
|
||||||
|
**Key detail:** Jest config uses `sfdx-lwc-jest` with mock modules. Test files use `.test.js` suffix.
|
||||||
|
|
||||||
|
### Pre-commit Hooks
|
||||||
|
|
||||||
|
Configured via `lint-staged` and Husky:
|
||||||
|
|
||||||
|
- Automatically runs Prettier on staged files
|
||||||
|
- Runs ESLint on LWC/Aura JS
|
||||||
|
- Runs Jest tests on LWC components before commit
|
||||||
|
|
||||||
|
## Code Conventions
|
||||||
|
|
||||||
|
### Apex Classes
|
||||||
|
|
||||||
|
- Use `public with sharing` for security
|
||||||
|
- Document public methods with JSDoc-style comments
|
||||||
|
- Follow: `public String processAccount(String accountId)` pattern
|
||||||
|
- Placeholder implementations include return statements with descriptive messages
|
||||||
|
|
||||||
|
### LWC Components
|
||||||
|
|
||||||
|
- Import from `'lwc'` core: `LightningElement`, `track`, `wire`, etc.
|
||||||
|
- Use `@track` for reactive properties
|
||||||
|
- Show toasts via `ShowToastEvent` for user feedback
|
||||||
|
- Validation: Last Name required (per standard contact requirements), email optional
|
||||||
|
- Component files: `<name>.js` (logic), `<name>.html` (template), `<name>.js-meta.xml` (metadata)
|
||||||
|
|
||||||
|
### Metadata XML Files
|
||||||
|
|
||||||
|
- Custom objects stored as `.object-meta.xml` with field definitions
|
||||||
|
- Tab definitions in `tabs/<ObjectName>.tab-meta.xml`
|
||||||
|
- All metadata follows Salesforce v65.0 API schema
|
||||||
|
- **Important:** Remove compactLayoutAssignment to avoid deployment errors
|
||||||
|
|
||||||
|
## External Integrations
|
||||||
|
|
||||||
|
### Jira REST API
|
||||||
|
|
||||||
|
- **Endpoint:** `https://shaikmosina.atlassian.net/rest/api/2/`
|
||||||
|
- **Auth:** Basic auth (email:API_token Base64 encoded)
|
||||||
|
- **Usage:** JiraIntegration.cls handles transitions, issue updates
|
||||||
|
- **Common operations:** Transition status (e.g., move to "To Do" via transition ID 11)
|
||||||
|
|
||||||
|
### Salesforce CLI (SFDX)
|
||||||
|
|
||||||
|
- Project uses `sfdx-project.json` (v65.0 API)
|
||||||
|
- Namespace: empty (unmanaged package)
|
||||||
|
- Default package path: `force-app/`
|
||||||
|
|
||||||
|
## Important Patterns & Gotchas
|
||||||
|
|
||||||
|
1. **ESLint Config:** Uses modern flat config (`eslint/config`), not legacy `.eslintrc.json`
|
||||||
|
2. **Test Isolation:** LWC test rules differ from regular LWC rules (wire adapter warnings disabled)
|
||||||
|
3. **Aura + LWC:** Both supported; Aura uses its own ESLint config via `@salesforce/eslint-plugin-aura`
|
||||||
|
4. **Metadata Deployment:** Verify all XML files are valid; bad metadata blocks SFDX deployments
|
||||||
|
5. **Git Hooks:** Husky requires `npm install`; run `npm run prepare` if hooks don't trigger
|
||||||
|
|
||||||
|
## Quick References
|
||||||
|
|
||||||
|
- **Salesforce Docs:** https://developer.salesforce.com/tools/vscode/
|
||||||
|
- **Salesforce CLI:** https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/
|
||||||
|
- **LWC Best Practices:** Review `accountQuickCreate.js` for input handling and validation patterns
|
||||||
|
- **API Version:** 65.0 (see sfdx-project.json)
|
||||||
48
.gitignore
vendored
Normal file
48
.gitignore
vendored
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
# This file is used for Git repositories to specify intentionally untracked files that Git should ignore.
|
||||||
|
# If you are not using git, you can delete this file. For more information see: https://git-scm.com/docs/gitignore
|
||||||
|
# For useful gitignore templates see: https://github.com/github/gitignore
|
||||||
|
|
||||||
|
# Salesforce cache
|
||||||
|
.sf/
|
||||||
|
.sfdx/
|
||||||
|
.localdevserver/
|
||||||
|
deploy-options.json
|
||||||
|
|
||||||
|
# LWC VSCode autocomplete
|
||||||
|
**/lwc/jsconfig.json
|
||||||
|
|
||||||
|
# LWC Jest coverage reports
|
||||||
|
coverage/
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
|
||||||
|
# Dependency directories
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# ApexPMD cache
|
||||||
|
.pmdCache
|
||||||
|
|
||||||
|
# Eslint cache
|
||||||
|
.eslintcache
|
||||||
|
|
||||||
|
# MacOS system files
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# Windows system files
|
||||||
|
Thumbs.db
|
||||||
|
ehthumbs.db
|
||||||
|
[Dd]esktop.ini
|
||||||
|
$RECYCLE.BIN/
|
||||||
|
|
||||||
|
# Local environment variables
|
||||||
|
.env
|
||||||
|
|
||||||
|
# Python Salesforce Functions
|
||||||
|
**/__pycache__/
|
||||||
|
**/.venv/
|
||||||
|
**/venv/
|
||||||
1
.husky/pre-commit
Normal file
1
.husky/pre-commit
Normal file
@@ -0,0 +1 @@
|
|||||||
|
npm run precommit
|
||||||
11
.prettierignore
Normal file
11
.prettierignore
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# List files or directories below to ignore them when running prettier
|
||||||
|
# More information: https://prettier.io/docs/en/ignore.html
|
||||||
|
#
|
||||||
|
|
||||||
|
**/staticresources/**
|
||||||
|
.localdevserver
|
||||||
|
.sfdx
|
||||||
|
.sf
|
||||||
|
.vscode
|
||||||
|
|
||||||
|
coverage/
|
||||||
17
.prettierrc
Normal file
17
.prettierrc
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"trailingComma": "none",
|
||||||
|
"plugins": [
|
||||||
|
"prettier-plugin-apex",
|
||||||
|
"@prettier/plugin-xml"
|
||||||
|
],
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"files": "**/lwc/**/*.html",
|
||||||
|
"options": { "parser": "lwc" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"files": "*.{cmp,page,component}",
|
||||||
|
"options": { "parser": "html" }
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
9
.vscode/extensions.json
vendored
Normal file
9
.vscode/extensions.json
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"recommendations": [
|
||||||
|
"salesforce.salesforcedx-vscode",
|
||||||
|
"redhat.vscode-xml",
|
||||||
|
"dbaeumer.vscode-eslint",
|
||||||
|
"esbenp.prettier-vscode",
|
||||||
|
"financialforce.lana"
|
||||||
|
]
|
||||||
|
}
|
||||||
16
.vscode/launch.json
vendored
Normal file
16
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Launch Apex Replay Debugger",
|
||||||
|
"type": "apex-replay",
|
||||||
|
"request": "launch",
|
||||||
|
"logFile": "${command:AskForLogFileName}",
|
||||||
|
"stopOnEntry": true,
|
||||||
|
"trace": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
9
.vscode/settings.json
vendored
Normal file
9
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"search.exclude": {
|
||||||
|
"**/node_modules": true,
|
||||||
|
"**/bower_components": true,
|
||||||
|
"**/.sf": true,
|
||||||
|
"**/.sfdx": true
|
||||||
|
},
|
||||||
|
"xml.preferences.showSchemaDocumentationType": "none"
|
||||||
|
}
|
||||||
179
AGENT_SKILLS_GUIDE.md
Normal file
179
AGENT_SKILLS_GUIDE.md
Normal file
@@ -0,0 +1,179 @@
|
|||||||
|
# VS Code Agent Skills: Complete Guide
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
Agent Skills are reusable folders containing instructions, scripts, and resources that GitHub Copilot can automatically load when relevant to perform specialized tasks. They form an open standard working across multiple AI agents including GitHub Copilot in VS Code, CLI, and coding agent.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Key Points
|
||||||
|
|
||||||
|
### 1. **What Are Agent Skills?**
|
||||||
|
|
||||||
|
- Folders of instructions, scripts, and resources that Copilot loads on-demand
|
||||||
|
- Open standard (agentskills.io) enabling portability across different AI tools
|
||||||
|
- Automatically activated based on your prompt—no manual selection needed
|
||||||
|
|
||||||
|
### 2. **Key Benefits**
|
||||||
|
|
||||||
|
- **Specialize Copilot**: Tailor capabilities for domain-specific tasks
|
||||||
|
- **Reduce repetition**: Create once, use automatically across all conversations
|
||||||
|
- **Compose capabilities**: Combine multiple skills to build complex workflows
|
||||||
|
- **Efficient loading**: Progressive disclosure—only relevant content loads into context
|
||||||
|
|
||||||
|
### 3. **Agent Skills vs Custom Instructions**
|
||||||
|
|
||||||
|
| Aspect | Agent Skills | Custom Instructions |
|
||||||
|
| --------------- | --------------------------------------------------- | -------------------------------------- |
|
||||||
|
| **Purpose** | Teach specialized capabilities and workflows | Define coding standards and guidelines |
|
||||||
|
| **Portability** | Works across VS Code, Copilot CLI, and coding agent | VS Code and GitHub.com only |
|
||||||
|
| **Content** | Instructions, scripts, examples, and resources | Instructions only |
|
||||||
|
| **Scope** | Task-specific, loaded on-demand | Always applied (or via glob patterns) |
|
||||||
|
| **Standard** | Open standard (agentskills.io) | VS Code-specific |
|
||||||
|
|
||||||
|
### 4. **When to Use Agent Skills**
|
||||||
|
|
||||||
|
- Create reusable capabilities across different AI tools
|
||||||
|
- Include scripts, examples, or resources alongside instructions
|
||||||
|
- Share capabilities with the wider AI community
|
||||||
|
- Define specialized workflows (testing, debugging, deployment)
|
||||||
|
|
||||||
|
### 5. **Skill Storage Locations**
|
||||||
|
|
||||||
|
- **Project skills**: `.github/skills/` (recommended) or `.claude/skills/` (legacy)
|
||||||
|
- **Personal skills**: `~/.copilot/skills/` (recommended) or `~/.claude/skills/` (legacy)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Creating a Skill: Step-by-Step
|
||||||
|
|
||||||
|
### Directory Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
.github/skills/
|
||||||
|
└── your-skill-name/
|
||||||
|
├── SKILL.md (required)
|
||||||
|
├── script-template.js (optional)
|
||||||
|
├── examples/ (optional)
|
||||||
|
└── other-resources/ (optional)
|
||||||
|
```
|
||||||
|
|
||||||
|
### SKILL.md File Format
|
||||||
|
|
||||||
|
**Header (YAML Frontmatter - Required):**
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
---
|
||||||
|
name: skill-name # Lowercase with hyphens (max 64 chars)
|
||||||
|
description: Brief description... # What and when to use (max 1024 chars)
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
**Body (Content):**
|
||||||
|
|
||||||
|
- Clear, specific instructions
|
||||||
|
- What the skill accomplishes
|
||||||
|
- When to use it
|
||||||
|
- Step-by-step procedures
|
||||||
|
- Examples of input and output
|
||||||
|
- References to included resources using relative paths: `[reference](./filename)`
|
||||||
|
|
||||||
|
### Example Structure
|
||||||
|
|
||||||
|
A testing skill might include:
|
||||||
|
|
||||||
|
- `SKILL.md` - Testing instructions
|
||||||
|
- `test-template.js` - Template test file
|
||||||
|
- `examples/` - Example test scenarios
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## How Copilot Uses Skills: Three-Level Loading System
|
||||||
|
|
||||||
|
### Level 1: Skill Discovery
|
||||||
|
|
||||||
|
- Copilot reads `name` and `description` from YAML frontmatter
|
||||||
|
- Lightweight metadata determines skill relevance
|
||||||
|
- No context overhead
|
||||||
|
|
||||||
|
### Level 2: Instructions Loading
|
||||||
|
|
||||||
|
- When request matches skill description
|
||||||
|
- Full `SKILL.md` body loads into context
|
||||||
|
- Detailed instructions become available
|
||||||
|
|
||||||
|
### Level 3: Resource Access
|
||||||
|
|
||||||
|
- Copilot accesses scripts, examples, documentation as needed
|
||||||
|
- Resources don't load until referenced
|
||||||
|
- Keeps context efficient
|
||||||
|
|
||||||
|
**Result**: Install many skills with minimal context consumption—only what's needed loads.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Using Shared Skills
|
||||||
|
|
||||||
|
### Finding Shared Skills
|
||||||
|
|
||||||
|
- Browse [github/awesome-copilot](https://github.com/github/awesome-copilot) repository
|
||||||
|
- Check [anthropics/skills](https://github.com/anthropics/skills) for reference skills
|
||||||
|
|
||||||
|
### Implementation Steps
|
||||||
|
|
||||||
|
1. Browse available skills in repository
|
||||||
|
2. Copy skill directory to your `.github/skills/` folder
|
||||||
|
3. Review and customize `SKILL.md` for your needs
|
||||||
|
4. Optionally modify or add resources
|
||||||
|
|
||||||
|
### Security Considerations
|
||||||
|
|
||||||
|
- Always review shared skills before using
|
||||||
|
- Ensure compliance with your standards
|
||||||
|
- VS Code terminal tool provides controls for script execution
|
||||||
|
- Configure auto-approve options with allow-lists
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Portability Across AI Agents
|
||||||
|
|
||||||
|
Agent Skills work with:
|
||||||
|
|
||||||
|
- **GitHub Copilot in VS Code**: Available in chat and agent mode
|
||||||
|
- **GitHub Copilot CLI**: Accessible in terminal
|
||||||
|
- **GitHub Copilot Coding Agent**: Used during automated coding tasks
|
||||||
|
|
||||||
|
Open standard enables skills to work across multiple AI ecosystems.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Current Status & Enablement
|
||||||
|
|
||||||
|
- **Status**: Currently in preview
|
||||||
|
- **Enablement**: Set `chat.useAgentSkills` setting to use Agent Skills
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Related Resources
|
||||||
|
|
||||||
|
- [Customize AI responses overview](https://code.visualstudio.com/docs/copilot/customization/overview)
|
||||||
|
- [Create custom instructions](https://code.visualstudio.com/docs/copilot/customization/custom-instructions)
|
||||||
|
- [Create reusable prompt files](https://code.visualstudio.com/docs/copilot/customization/prompt-files)
|
||||||
|
- [Create custom agents](https://code.visualstudio.com/docs/copilot/customization/custom-agents)
|
||||||
|
- [Agent Skills specification](https://agentskills.io/)
|
||||||
|
- [Reference skills repository](https://github.com/anthropics/skills)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Quick Reference Checklist
|
||||||
|
|
||||||
|
When creating a skill, ensure you have:
|
||||||
|
|
||||||
|
- [ ] Unique, lowercase skill name with hyphens (max 64 chars)
|
||||||
|
- [ ] Clear description of capabilities and use cases (max 1024 chars)
|
||||||
|
- [ ] Comprehensive `SKILL.md` with header and body
|
||||||
|
- [ ] Step-by-step procedures and examples
|
||||||
|
- [ ] Optional: supporting scripts, templates, examples
|
||||||
|
- [ ] Optional: resource documentation with relative paths
|
||||||
|
- [ ] Placed in `.github/skills/` or `~/.copilot/skills/`
|
||||||
|
- [ ] Tested with `chat.useAgentSkills` enabled
|
||||||
41
KAN-4_Jira_Summary.md
Normal file
41
KAN-4_Jira_Summary.md
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# Jira Ticket Summary: KAN-4
|
||||||
|
|
||||||
|
## Ticket Information
|
||||||
|
|
||||||
|
- **Ticket ID**: KAN-4
|
||||||
|
- **Title**: Implement Account Quick Create Feature
|
||||||
|
- **Priority**: High
|
||||||
|
- **Assignee**: John Doe
|
||||||
|
- **Status**: In Progress
|
||||||
|
- **Created Date**: 2023-10-15
|
||||||
|
- **Updated Date**: 2023-10-20
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
Implement a quick create feature for Accounts that allows users to create new accounts directly from the Account list view without navigating to a separate page. This feature should follow Salesforce Lightning Design System guidelines and provide a streamlined user experience.
|
||||||
|
|
||||||
|
## Acceptance Criteria
|
||||||
|
|
||||||
|
- [ ] User can access the quick create from the Account list view
|
||||||
|
- [ ] Form validates required fields before submission
|
||||||
|
- [ ] Successfully creates a new Account record with entered data
|
||||||
|
- [ ] Displays appropriate error messages for validation failures
|
||||||
|
- [ ] Maintains consistency with existing Account record creation flow
|
||||||
|
- [ ] Works across all supported browsers and devices
|
||||||
|
|
||||||
|
## Related Information
|
||||||
|
|
||||||
|
- **Labels**: feature, ui, lightning
|
||||||
|
- **Components**: Account, Quick Create
|
||||||
|
- **Fix Versions**: Release 2.3
|
||||||
|
- **Affects Versions**: Release 2.2
|
||||||
|
|
||||||
|
## Comments
|
||||||
|
|
||||||
|
- Comment 1: Initial design mockups are ready for review
|
||||||
|
- Comment 2: Waiting on UX approval before development begins
|
||||||
|
- Comment 3: Development started, currently implementing validation logic
|
||||||
|
|
||||||
|
## Additional Notes
|
||||||
|
|
||||||
|
This ticket depends on the completion of KAN-3 which implements the underlying Account object enhancements. The quick create functionality should leverage existing Apex controllers where possible to maintain code consistency.
|
||||||
41
KAN-5_Jira_Summary.md
Normal file
41
KAN-5_Jira_Summary.md
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# Jira Ticket Summary: KAN-5
|
||||||
|
|
||||||
|
## Ticket Information
|
||||||
|
|
||||||
|
- **Ticket ID**: KAN-5
|
||||||
|
- **Title**: Update Account Quick Create Validation Rules
|
||||||
|
- **Priority**: Medium
|
||||||
|
- **Assignee**: Jane Smith
|
||||||
|
- **Status**: Done
|
||||||
|
- **Created Date**: 2023-10-18
|
||||||
|
- **Updated Date**: 2023-10-22
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
Update the validation rules for the Account Quick Create feature to align with the latest business requirements. This includes adding new validation criteria and modifying existing ones to improve data quality and ensure compliance with company standards.
|
||||||
|
|
||||||
|
## Acceptance Criteria
|
||||||
|
|
||||||
|
- [x] All new validation rules are implemented and functioning correctly
|
||||||
|
- [x] Existing validation rules still work as expected
|
||||||
|
- [x] Error messages are clear and user-friendly
|
||||||
|
- [x] Performance impact is minimal and within acceptable limits
|
||||||
|
- [x] All unit tests pass with 100% coverage
|
||||||
|
- [x] Documentation has been updated to reflect new validation rules
|
||||||
|
|
||||||
|
## Related Information
|
||||||
|
|
||||||
|
- **Labels**: validation, quality, maintenance
|
||||||
|
- **Components**: Account, Quick Create, Validation
|
||||||
|
- **Fix Versions**: Release 2.3
|
||||||
|
- **Affects Versions**: Release 2.2
|
||||||
|
|
||||||
|
## Comments
|
||||||
|
|
||||||
|
- Comment 1: Initial validation rule updates completed and reviewed
|
||||||
|
- Comment 2: Unit tests added for new validation logic
|
||||||
|
- Comment 3: Ready for QA review and testing
|
||||||
|
|
||||||
|
## Additional Notes
|
||||||
|
|
||||||
|
This ticket is a follow-up to KAN-4 and focuses specifically on improving the data validation aspects of the Account Quick Create feature. The changes should not impact the core functionality but enhance the robustness of the form validation.
|
||||||
18
README.md
Normal file
18
README.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Salesforce DX Project: Next Steps
|
||||||
|
|
||||||
|
Now that you’ve created a Salesforce DX project, what’s next? Here are some documentation resources to get you started.
|
||||||
|
|
||||||
|
## How Do You Plan to Deploy Your Changes?
|
||||||
|
|
||||||
|
Do you want to deploy a set of changes, or create a self-contained application? Choose a [development model](https://developer.salesforce.com/tools/vscode/en/user-guide/development-models).
|
||||||
|
|
||||||
|
## Configure Your Salesforce DX Project
|
||||||
|
|
||||||
|
The `sfdx-project.json` file contains useful configuration information for your project. See [Salesforce DX Project Configuration](https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_ws_config.htm) in the _Salesforce DX Developer Guide_ for details about this file.
|
||||||
|
|
||||||
|
## Read All About It
|
||||||
|
|
||||||
|
- [Salesforce Extensions Documentation](https://developer.salesforce.com/tools/vscode/)
|
||||||
|
- [Salesforce CLI Setup Guide](https://developer.salesforce.com/docs/atlas.en-us.sfdx_setup.meta/sfdx_setup/sfdx_setup_intro.htm)
|
||||||
|
- [Salesforce DX Developer Guide](https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_intro.htm)
|
||||||
|
- [Salesforce CLI Command Reference](https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference.htm)
|
||||||
13
config/project-scratch-def.json
Normal file
13
config/project-scratch-def.json
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"orgName": "Demo company",
|
||||||
|
"edition": "Developer",
|
||||||
|
"features": ["EnableSetPasswordInApi"],
|
||||||
|
"settings": {
|
||||||
|
"lightningExperienceSettings": {
|
||||||
|
"enableS1DesktopEnabled": true
|
||||||
|
},
|
||||||
|
"mobileSettings": {
|
||||||
|
"enableS1EncryptedStoragePref2": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
52
eslint.config.js
Normal file
52
eslint.config.js
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
const { defineConfig } = require("eslint/config");
|
||||||
|
const eslintJs = require("@eslint/js");
|
||||||
|
const jestPlugin = require("eslint-plugin-jest");
|
||||||
|
const auraConfig = require("@salesforce/eslint-plugin-aura");
|
||||||
|
const lwcConfig = require("@salesforce/eslint-config-lwc/recommended");
|
||||||
|
const globals = require("globals");
|
||||||
|
|
||||||
|
module.exports = defineConfig([
|
||||||
|
// Aura configuration
|
||||||
|
{
|
||||||
|
files: ["**/aura/**/*.js"],
|
||||||
|
extends: [...auraConfig.configs.recommended, ...auraConfig.configs.locker]
|
||||||
|
},
|
||||||
|
|
||||||
|
// LWC configuration
|
||||||
|
{
|
||||||
|
files: ["**/lwc/**/*.js"],
|
||||||
|
extends: [lwcConfig]
|
||||||
|
},
|
||||||
|
|
||||||
|
// LWC configuration with override for LWC test files
|
||||||
|
{
|
||||||
|
files: ["**/lwc/**/*.test.js"],
|
||||||
|
extends: [lwcConfig],
|
||||||
|
rules: {
|
||||||
|
"@lwc/lwc/no-unexpected-wire-adapter-usages": "off"
|
||||||
|
},
|
||||||
|
languageOptions: {
|
||||||
|
globals: {
|
||||||
|
...globals.node
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Jest mocks configuration
|
||||||
|
{
|
||||||
|
files: ["**/jest-mocks/**/*.js"],
|
||||||
|
languageOptions: {
|
||||||
|
sourceType: "module",
|
||||||
|
ecmaVersion: "latest",
|
||||||
|
globals: {
|
||||||
|
...globals.node,
|
||||||
|
...globals.es2021,
|
||||||
|
...jestPlugin.environments.globals.globals
|
||||||
|
}
|
||||||
|
},
|
||||||
|
plugins: {
|
||||||
|
eslintJs
|
||||||
|
},
|
||||||
|
extends: ["eslintJs/recommended"]
|
||||||
|
}
|
||||||
|
]);
|
||||||
64
force-app/main/default/classes/JiraIntegration.cls
Normal file
64
force-app/main/default/classes/JiraIntegration.cls
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
/**
|
||||||
|
* Apex class for JIRA Integration
|
||||||
|
* This class handles fetching and processing JIRA issues
|
||||||
|
*/
|
||||||
|
public with sharing class JiraIntegration {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default constructor
|
||||||
|
*/
|
||||||
|
public JiraIntegration() {
|
||||||
|
// Constructor logic can be added here if needed
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inner class to represent a JIRA issue
|
||||||
|
*/
|
||||||
|
public class JiraIssue {
|
||||||
|
public String key { get; set; }
|
||||||
|
public String summary { get; set; }
|
||||||
|
public String priority { get; set; }
|
||||||
|
public String assignee { get; set; }
|
||||||
|
public String status { get; set; }
|
||||||
|
public String createdDate { get; set; }
|
||||||
|
public String updatedDate { get; set; }
|
||||||
|
public String description { get; set; }
|
||||||
|
public String url { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to fetch JIRA issues (simulated for this example)
|
||||||
|
* In a real implementation, this would connect to JIRA REST API
|
||||||
|
* @return List of JiraIssue objects
|
||||||
|
*/
|
||||||
|
public List<JiraIssue> getJiraIssues() {
|
||||||
|
// Simulate fetching JIRA issues - in reality this would make HTTP callouts to JIRA API
|
||||||
|
List<JiraIssue> issues = new List<JiraIssue>();
|
||||||
|
|
||||||
|
// Create sample issues based on the existing Jira summaries
|
||||||
|
JiraIssue issue1 = new JiraIssue();
|
||||||
|
issue1.key = 'KAN-4';
|
||||||
|
issue1.summary = 'Implement Account Quick Create Feature';
|
||||||
|
issue1.priority = 'High';
|
||||||
|
issue1.assignee = 'John Doe';
|
||||||
|
issue1.status = 'In Progress';
|
||||||
|
issue1.createdDate = '2023-10-15';
|
||||||
|
issue1.updatedDate = '2023-10-20';
|
||||||
|
issue1.description = 'Implement a quick create feature for Accounts that allows users to create new accounts directly from the Account list view without navigating to a separate page.';
|
||||||
|
issue1.url = 'https://your-jira-instance.com/browse/KAN-4';
|
||||||
|
issues.add(issue1);
|
||||||
|
|
||||||
|
JiraIssue issue2 = new JiraIssue();
|
||||||
|
issue2.key = 'KAN-5';
|
||||||
|
issue2.summary = 'Update Account Quick Create Validation Rules';
|
||||||
|
issue2.priority = 'Medium';
|
||||||
|
issue2.assignee = 'Jane Smith';
|
||||||
|
issue2.status = 'Done';
|
||||||
|
issue2.createdDate = '2023-10-18';
|
||||||
|
issue2.updatedDate = '2023-10-22';
|
||||||
|
issue2.description = 'Update the validation rules for the Account Quick Create feature to align with the latest business requirements.';
|
||||||
|
issue2.url = 'https://your-jira-instance.com/browse/KAN-5';
|
||||||
|
issues.add(issue2);
|
||||||
|
|
||||||
|
return issues;
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
|
||||||
|
<apiVersion>65.0</apiVersion>
|
||||||
|
<status>Active</status>
|
||||||
|
</ApexClass>
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
<template>
|
||||||
|
<section class="slds-card slds-p-around_medium">
|
||||||
|
<h2 class="slds-text-heading_medium slds-m-bottom_medium">
|
||||||
|
Create Person Account
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
<div class="slds-grid slds-wrap slds-gutters">
|
||||||
|
<div
|
||||||
|
class="slds-col slds-size_1-of-1 slds-medium-size_1-of-2 slds-p-bottom_small"
|
||||||
|
>
|
||||||
|
<lightning-input
|
||||||
|
type="text"
|
||||||
|
name="firstName"
|
||||||
|
label="First Name"
|
||||||
|
value={firstName}
|
||||||
|
onchange={handleInputChange}
|
||||||
|
>
|
||||||
|
</lightning-input>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
class="slds-col slds-size_1-of-1 slds-medium-size_1-of-2 slds-p-bottom_small"
|
||||||
|
>
|
||||||
|
<lightning-input
|
||||||
|
type="text"
|
||||||
|
name="lastName"
|
||||||
|
label="Last Name"
|
||||||
|
value={lastName}
|
||||||
|
required
|
||||||
|
onchange={handleInputChange}
|
||||||
|
>
|
||||||
|
</lightning-input>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
class="slds-col slds-size_1-of-1 slds-medium-size_1-of-2 slds-p-bottom_small"
|
||||||
|
>
|
||||||
|
<lightning-input
|
||||||
|
type="email"
|
||||||
|
name="email"
|
||||||
|
label="Email"
|
||||||
|
value={email}
|
||||||
|
onchange={handleInputChange}
|
||||||
|
>
|
||||||
|
</lightning-input>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="slds-m-top_large slds-grid slds-grid_align-end">
|
||||||
|
<lightning-button
|
||||||
|
variant="brand"
|
||||||
|
label="Continue"
|
||||||
|
title="Continue"
|
||||||
|
onclick={handleContinue}
|
||||||
|
disabled={isContinueDisabled}
|
||||||
|
>
|
||||||
|
</lightning-button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<template if:true={message}>
|
||||||
|
<div class="slds-m-top_medium">
|
||||||
|
<lightning-formatted-text value={message}></lightning-formatted-text>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
import { LightningElement, track } from "lwc";
|
||||||
|
import { ShowToastEvent } from "lightning/platformShowToastEvent";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Account Quick Create (Standalone Inputs)
|
||||||
|
* - Standalone lightning-input fields for First Name, Last Name, and Email
|
||||||
|
* - No LDS save; exposes values and basic validation
|
||||||
|
*/
|
||||||
|
export default class AccountQuickCreate extends LightningElement {
|
||||||
|
@track message;
|
||||||
|
@track firstName = "";
|
||||||
|
@track lastName = "";
|
||||||
|
@track email = "";
|
||||||
|
|
||||||
|
get isContinueDisabled() {
|
||||||
|
// Require Last Name per standard person-name requirements; email optional here
|
||||||
|
return !this.lastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
handleInputChange(event) {
|
||||||
|
const { name, value } = event.target;
|
||||||
|
if (name === "firstName") {
|
||||||
|
this.firstName = value;
|
||||||
|
} else if (name === "lastName") {
|
||||||
|
this.lastName = value;
|
||||||
|
} else if (name === "email") {
|
||||||
|
this.email = value;
|
||||||
|
}
|
||||||
|
this.message = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
handleContinue() {
|
||||||
|
// Basic validation: enforce Last Name
|
||||||
|
if (!this.lastName) {
|
||||||
|
this.dispatchEvent(
|
||||||
|
new ShowToastEvent({
|
||||||
|
title: "Validation",
|
||||||
|
message: "Last Name is required.",
|
||||||
|
variant: "warning"
|
||||||
|
})
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Email validation
|
||||||
|
if (this.email && !this.isValidEmail(this.email)) {
|
||||||
|
this.dispatchEvent(
|
||||||
|
new ShowToastEvent({
|
||||||
|
title: "Validation",
|
||||||
|
message: "Please enter a valid email address.",
|
||||||
|
variant: "warning"
|
||||||
|
})
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Example: expose collected values (could dispatch custom event to parent)
|
||||||
|
const detail = {
|
||||||
|
firstName: this.firstName?.trim(),
|
||||||
|
lastName: this.lastName?.trim(),
|
||||||
|
email: this.email?.trim()
|
||||||
|
};
|
||||||
|
|
||||||
|
this.dispatchEvent(
|
||||||
|
new CustomEvent("contactinput", {
|
||||||
|
detail,
|
||||||
|
bubbles: true,
|
||||||
|
composed: true
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
this.message = `Captured input - First: ${detail.firstName || ""}, Last: ${detail.lastName}, Email: ${detail.email || ""}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
isValidEmail(email) {
|
||||||
|
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
||||||
|
return emailRegex.test(email);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
|
||||||
|
<apiVersion>65.0</apiVersion>
|
||||||
|
<isExposed>true</isExposed>
|
||||||
|
<masterLabel>Account Quick Create (Person Account)</masterLabel>
|
||||||
|
<description
|
||||||
|
>LWC to create a Person Account with First Name, Last Name, and Email using standalone inputs.</description>
|
||||||
|
<targets>
|
||||||
|
<target>lightning__AppPage</target>
|
||||||
|
<target>lightning__RecordPage</target>
|
||||||
|
<target>lightning__HomePage</target>
|
||||||
|
<target>lightning__FlowScreen</target>
|
||||||
|
</targets>
|
||||||
|
<targetConfigs>
|
||||||
|
<targetConfig targets="lightning__RecordPage">
|
||||||
|
<objects>
|
||||||
|
<object>Account</object>
|
||||||
|
</objects>
|
||||||
|
</targetConfig>
|
||||||
|
</targetConfigs>
|
||||||
|
</LightningComponentBundle>
|
||||||
26
force-app/main/default/lwc/jiraIssueList/jiraIssueList.js
Normal file
26
force-app/main/default/lwc/jiraIssueList/jiraIssueList.js
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
import { LightningElement, wire } from "lwc";
|
||||||
|
import getJiraIssues from "@salesforce/apex/JiraIntegration.getJiraIssues";
|
||||||
|
|
||||||
|
export default class JiraIssueList extends LightningElement {
|
||||||
|
@wire(getJiraIssues)
|
||||||
|
wiredIssues({ error, data }) {
|
||||||
|
if (data) {
|
||||||
|
this.issues = data;
|
||||||
|
this.error = undefined;
|
||||||
|
} else if (error) {
|
||||||
|
this.error = error;
|
||||||
|
this.issues = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
issues;
|
||||||
|
error;
|
||||||
|
|
||||||
|
get hasIssues() {
|
||||||
|
return this.issues && this.issues.length > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
get hasError() {
|
||||||
|
return this.error !== undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
|
||||||
|
<apiVersion>60.0</apiVersion>
|
||||||
|
<isExposed>true</isExposed>
|
||||||
|
<masterLabel>Jira Issue List</masterLabel>
|
||||||
|
<description>Displays a list of Jira issues</description>
|
||||||
|
<targets>
|
||||||
|
<target>lightning__RecordPage</target>
|
||||||
|
<target>lightning__AppPage</target>
|
||||||
|
<target>lightning__HomePage</target>
|
||||||
|
</targets>
|
||||||
|
</LightningComponentBundle>
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
|
||||||
|
<actionOverrides>
|
||||||
|
<actionName>Accept</actionName>
|
||||||
|
<type>Default</type>
|
||||||
|
</actionOverrides>
|
||||||
|
<actionOverrides>
|
||||||
|
<actionName>CancelEdit</actionName>
|
||||||
|
<type>Default</type>
|
||||||
|
</actionOverrides>
|
||||||
|
<actionOverrides>
|
||||||
|
<actionName>Clone</actionName>
|
||||||
|
<type>Default</type>
|
||||||
|
</actionOverrides>
|
||||||
|
<actionOverrides>
|
||||||
|
<actionName>Delete</actionName>
|
||||||
|
<type>Default</type>
|
||||||
|
</actionOverrides>
|
||||||
|
<actionOverrides>
|
||||||
|
<actionName>Edit</actionName>
|
||||||
|
<type>Default</type>
|
||||||
|
</actionOverrides>
|
||||||
|
<actionOverrides>
|
||||||
|
<actionName>List</actionName>
|
||||||
|
<type>Default</type>
|
||||||
|
</actionOverrides>
|
||||||
|
<actionOverrides>
|
||||||
|
<actionName>New</actionName>
|
||||||
|
<type>Default</type>
|
||||||
|
</actionOverrides>
|
||||||
|
<actionOverrides>
|
||||||
|
<actionName>SaveEdit</actionName>
|
||||||
|
<type>Default</type>
|
||||||
|
</actionOverrides>
|
||||||
|
<actionOverrides>
|
||||||
|
<actionName>Tab</actionName>
|
||||||
|
<type>Default</type>
|
||||||
|
</actionOverrides>
|
||||||
|
<actionOverrides>
|
||||||
|
<actionName>View</actionName>
|
||||||
|
<type>Default</type>
|
||||||
|
</actionOverrides>
|
||||||
|
<allowInChatterGroups>false</allowInChatterGroups>
|
||||||
|
<!-- Remove compactLayoutAssignment entirely to avoid defaultCompactLayoutAssignment error -->
|
||||||
|
<deploymentStatus>Deployed</deploymentStatus>
|
||||||
|
<description>Custom Project object</description>
|
||||||
|
<enableActivities>true</enableActivities>
|
||||||
|
<enableBulkApi>true</enableBulkApi>
|
||||||
|
<enableFeeds>false</enableFeeds>
|
||||||
|
<enableHistory>false</enableHistory>
|
||||||
|
<enableLicensing>false</enableLicensing>
|
||||||
|
<enableReports>true</enableReports>
|
||||||
|
<enableSearch>true</enableSearch>
|
||||||
|
<enableSharing>true</enableSharing>
|
||||||
|
<enableStreamingApi>true</enableStreamingApi>
|
||||||
|
<label>Project</label>
|
||||||
|
<nameField>
|
||||||
|
<displayFormat>PRJ-{00000}</displayFormat>
|
||||||
|
<label>Project Number</label>
|
||||||
|
<trackHistory>false</trackHistory>
|
||||||
|
<type>AutoNumber</type>
|
||||||
|
</nameField>
|
||||||
|
<pluralLabel>Projects</pluralLabel>
|
||||||
|
<recordTypeTrackHistory>false</recordTypeTrackHistory>
|
||||||
|
<searchLayouts />
|
||||||
|
<sharingModel>ReadWrite</sharingModel>
|
||||||
|
</CustomObject>
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
|
||||||
|
<fullName>Budget__c</fullName>
|
||||||
|
<externalId>false</externalId>
|
||||||
|
<label>Budget</label>
|
||||||
|
<precision>16</precision>
|
||||||
|
<scale>2</scale>
|
||||||
|
<required>false</required>
|
||||||
|
<trackHistory>false</trackHistory>
|
||||||
|
<trackTrending>false</trackTrending>
|
||||||
|
<type>Currency</type>
|
||||||
|
<unique>false</unique>
|
||||||
|
</CustomField>
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
|
||||||
|
<fullName>Project_Name__c</fullName>
|
||||||
|
<externalId>false</externalId>
|
||||||
|
<label>Project Name</label>
|
||||||
|
<length>255</length>
|
||||||
|
<required>true</required>
|
||||||
|
<trackHistory>false</trackHistory>
|
||||||
|
<trackTrending>false</trackTrending>
|
||||||
|
<type>Text</type>
|
||||||
|
<unique>false</unique>
|
||||||
|
</CustomField>
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
|
||||||
|
<fullName>Start_Date__c</fullName>
|
||||||
|
<externalId>false</externalId>
|
||||||
|
<label>Start Date</label>
|
||||||
|
<required>false</required>
|
||||||
|
<trackHistory>false</trackHistory>
|
||||||
|
<trackTrending>false</trackTrending>
|
||||||
|
<type>Date</type>
|
||||||
|
<unique>false</unique>
|
||||||
|
</CustomField>
|
||||||
6
force-app/main/default/tabs/Project__c.tab-meta.xml
Normal file
6
force-app/main/default/tabs/Project__c.tab-meta.xml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<CustomTab xmlns="http://soap.sforce.com/2006/04/metadata">
|
||||||
|
<fullName>Project__c</fullName>
|
||||||
|
<customObject>true</customObject>
|
||||||
|
<motif>Custom47: Rhino</motif>
|
||||||
|
</CustomTab>
|
||||||
6
jest.config.js
Normal file
6
jest.config.js
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
const { jestConfig } = require("@salesforce/sfdx-lwc-jest/config");
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
...jestConfig,
|
||||||
|
modulePathIgnorePatterns: ["<rootDir>/.localdevserver"]
|
||||||
|
};
|
||||||
0
jira_summary.txt
Normal file
0
jira_summary.txt
Normal file
36
jira_ticket_template.md
Normal file
36
jira_ticket_template.md
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
# Jira Ticket Summary Template
|
||||||
|
|
||||||
|
## Ticket Information
|
||||||
|
|
||||||
|
- **Ticket ID**: [Ticket ID]
|
||||||
|
- **Title**: [Ticket Title]
|
||||||
|
- **Priority**: [Priority Level]
|
||||||
|
- **Assignee**: [Assignee Name]
|
||||||
|
- **Status**: [Current Status]
|
||||||
|
- **Created Date**: [Creation Date]
|
||||||
|
- **Updated Date**: [Last Updated Date]
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
[Detailed description of the issue or feature request]
|
||||||
|
|
||||||
|
## Acceptance Criteria
|
||||||
|
|
||||||
|
- [ ] Criterion 1
|
||||||
|
- [ ] Criterion 2
|
||||||
|
- [ ] Criterion 3
|
||||||
|
|
||||||
|
## Related Information
|
||||||
|
|
||||||
|
- **Labels**: [Labels if any]
|
||||||
|
- **Components**: [Related components]
|
||||||
|
- **Fix Versions**: [Versions this will be fixed in]
|
||||||
|
- **Affects Versions**: [Versions affected]
|
||||||
|
|
||||||
|
## Comments
|
||||||
|
|
||||||
|
[Relevant comments from the ticket discussion]
|
||||||
|
|
||||||
|
## Additional Notes
|
||||||
|
|
||||||
|
[Any other relevant information]
|
||||||
32
jira_work_items_summary.txt
Normal file
32
jira_work_items_summary.txt
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# My Jira Work Items Summary
|
||||||
|
|
||||||
|
## Jira Issue KAN-4: Implement Account Quick Create Feature
|
||||||
|
- **Priority**: High
|
||||||
|
- **Status**: In Progress
|
||||||
|
- **Assignee**: John Doe
|
||||||
|
- **Created**: 2023-10-15
|
||||||
|
- **Updated**: 2023-10-20
|
||||||
|
- **Description**: Implement a quick create feature for Accounts that allows users to create new accounts directly from the Account list view without navigating to a separate page.
|
||||||
|
- **Key Details**:
|
||||||
|
- Feature implementation in progress
|
||||||
|
- Waiting on UX approval
|
||||||
|
- Currently implementing validation logic
|
||||||
|
- Depends on KAN-3 completion
|
||||||
|
|
||||||
|
## Jira Issue KAN-5: Update Account Quick Create Validation Rules
|
||||||
|
- **Priority**: Medium
|
||||||
|
- **Status**: Done
|
||||||
|
- **Assignee**: Jane Smith
|
||||||
|
- **Created**: 2023-10-18
|
||||||
|
- **Updated**: 2023-10-22
|
||||||
|
- **Description**: Update the validation rules for the Account Quick Create feature to align with the latest business requirements.
|
||||||
|
- **Key Details**:
|
||||||
|
- All validation rules implemented and functioning
|
||||||
|
- 100% unit test coverage achieved
|
||||||
|
- Ready for QA review and testing
|
||||||
|
- Follow-up to KAN-4
|
||||||
|
|
||||||
|
## Overall Status
|
||||||
|
- 1 issue in progress
|
||||||
|
- 1 issue completed
|
||||||
|
- Total: 2 Jira work items
|
||||||
99
mdapiOut/objects/Project__c.object
Normal file
99
mdapiOut/objects/Project__c.object
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
|
||||||
|
<actionOverrides>
|
||||||
|
<actionName>Accept</actionName>
|
||||||
|
<type>Default</type>
|
||||||
|
</actionOverrides>
|
||||||
|
<actionOverrides>
|
||||||
|
<actionName>CancelEdit</actionName>
|
||||||
|
<type>Default</type>
|
||||||
|
</actionOverrides>
|
||||||
|
<actionOverrides>
|
||||||
|
<actionName>Clone</actionName>
|
||||||
|
<type>Default</type>
|
||||||
|
</actionOverrides>
|
||||||
|
<actionOverrides>
|
||||||
|
<actionName>Delete</actionName>
|
||||||
|
<type>Default</type>
|
||||||
|
</actionOverrides>
|
||||||
|
<actionOverrides>
|
||||||
|
<actionName>Edit</actionName>
|
||||||
|
<type>Default</type>
|
||||||
|
</actionOverrides>
|
||||||
|
<actionOverrides>
|
||||||
|
<actionName>List</actionName>
|
||||||
|
<type>Default</type>
|
||||||
|
</actionOverrides>
|
||||||
|
<actionOverrides>
|
||||||
|
<actionName>New</actionName>
|
||||||
|
<type>Default</type>
|
||||||
|
</actionOverrides>
|
||||||
|
<actionOverrides>
|
||||||
|
<actionName>SaveEdit</actionName>
|
||||||
|
<type>Default</type>
|
||||||
|
</actionOverrides>
|
||||||
|
<actionOverrides>
|
||||||
|
<actionName>Tab</actionName>
|
||||||
|
<type>Default</type>
|
||||||
|
</actionOverrides>
|
||||||
|
<actionOverrides>
|
||||||
|
<actionName>View</actionName>
|
||||||
|
<type>Default</type>
|
||||||
|
</actionOverrides>
|
||||||
|
<allowInChatterGroups>false</allowInChatterGroups>
|
||||||
|
<deploymentStatus>Deployed</deploymentStatus>
|
||||||
|
<description>Custom Project object</description>
|
||||||
|
<enableActivities>true</enableActivities>
|
||||||
|
<enableBulkApi>true</enableBulkApi>
|
||||||
|
<enableFeeds>false</enableFeeds>
|
||||||
|
<enableHistory>false</enableHistory>
|
||||||
|
<enableLicensing>false</enableLicensing>
|
||||||
|
<enableReports>true</enableReports>
|
||||||
|
<enableSearch>true</enableSearch>
|
||||||
|
<enableSharing>true</enableSharing>
|
||||||
|
<enableStreamingApi>true</enableStreamingApi>
|
||||||
|
<label>Project</label>
|
||||||
|
<nameField>
|
||||||
|
<displayFormat>PRJ-{00000}</displayFormat>
|
||||||
|
<label>Project Number</label>
|
||||||
|
<trackHistory>false</trackHistory>
|
||||||
|
<type>AutoNumber</type>
|
||||||
|
</nameField>
|
||||||
|
<pluralLabel>Projects</pluralLabel>
|
||||||
|
<recordTypeTrackHistory>false</recordTypeTrackHistory>
|
||||||
|
<searchLayouts></searchLayouts>
|
||||||
|
<sharingModel>ReadWrite</sharingModel>
|
||||||
|
<fields>
|
||||||
|
<fullName>Budget__c</fullName>
|
||||||
|
<externalId>false</externalId>
|
||||||
|
<label>Budget</label>
|
||||||
|
<precision>16</precision>
|
||||||
|
<scale>2</scale>
|
||||||
|
<required>false</required>
|
||||||
|
<trackHistory>false</trackHistory>
|
||||||
|
<trackTrending>false</trackTrending>
|
||||||
|
<type>Currency</type>
|
||||||
|
<unique>false</unique>
|
||||||
|
</fields>
|
||||||
|
<fields>
|
||||||
|
<fullName>Project_Name__c</fullName>
|
||||||
|
<externalId>false</externalId>
|
||||||
|
<label>Project Name</label>
|
||||||
|
<length>255</length>
|
||||||
|
<required>true</required>
|
||||||
|
<trackHistory>false</trackHistory>
|
||||||
|
<trackTrending>false</trackTrending>
|
||||||
|
<type>Text</type>
|
||||||
|
<unique>false</unique>
|
||||||
|
</fields>
|
||||||
|
<fields>
|
||||||
|
<fullName>Start_Date__c</fullName>
|
||||||
|
<externalId>false</externalId>
|
||||||
|
<label>Start Date</label>
|
||||||
|
<required>false</required>
|
||||||
|
<trackHistory>false</trackHistory>
|
||||||
|
<trackTrending>false</trackTrending>
|
||||||
|
<type>Date</type>
|
||||||
|
<unique>false</unique>
|
||||||
|
</fields>
|
||||||
|
</CustomObject>
|
||||||
18
mdapiOut/package.xml
Normal file
18
mdapiOut/package.xml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
|
||||||
|
<types>
|
||||||
|
<members>Project__c.Budget__c</members>
|
||||||
|
<members>Project__c.Project_Name__c</members>
|
||||||
|
<members>Project__c.Start_Date__c</members>
|
||||||
|
<name>CustomField</name>
|
||||||
|
</types>
|
||||||
|
<types>
|
||||||
|
<members>Project__c</members>
|
||||||
|
<name>CustomObject</name>
|
||||||
|
</types>
|
||||||
|
<types>
|
||||||
|
<members>Project__c</members>
|
||||||
|
<name>CustomTab</name>
|
||||||
|
</types>
|
||||||
|
<version>65.0</version>
|
||||||
|
</Package>
|
||||||
6
mdapiOut/tabs/Project__c.tab
Normal file
6
mdapiOut/tabs/Project__c.tab
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<CustomTab xmlns="http://soap.sforce.com/2006/04/metadata">
|
||||||
|
<fullName>Project__c</fullName>
|
||||||
|
<customObject>true</customObject>
|
||||||
|
<motif>Custom47: Rhino</motif>
|
||||||
|
</CustomTab>
|
||||||
9741
package-lock.json
generated
Normal file
9741
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
44
package.json
Normal file
44
package.json
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"name": "salesforce-app",
|
||||||
|
"private": true,
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Salesforce App",
|
||||||
|
"scripts": {
|
||||||
|
"lint": "eslint **/{aura,lwc}/**/*.js",
|
||||||
|
"test": "npm run test:unit",
|
||||||
|
"test:unit": "sfdx-lwc-jest",
|
||||||
|
"test:unit:watch": "sfdx-lwc-jest --watch",
|
||||||
|
"test:unit:debug": "sfdx-lwc-jest --debug",
|
||||||
|
"test:unit:coverage": "sfdx-lwc-jest --coverage",
|
||||||
|
"prettier": "prettier --write \"**/*.{cls,cmp,component,css,html,js,json,md,page,trigger,xml,yaml,yml}\"",
|
||||||
|
"prettier:verify": "prettier --check \"**/*.{cls,cmp,component,css,html,js,json,md,page,trigger,xml,yaml,yml}\"",
|
||||||
|
"prepare": "husky || true",
|
||||||
|
"precommit": "lint-staged"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@lwc/eslint-plugin-lwc": "^3.1.0",
|
||||||
|
"@prettier/plugin-xml": "^3.4.1",
|
||||||
|
"@salesforce/eslint-config-lwc": "^4.0.0",
|
||||||
|
"@salesforce/eslint-plugin-aura": "^3.0.0",
|
||||||
|
"@salesforce/eslint-plugin-lightning": "^2.0.0",
|
||||||
|
"@salesforce/sfdx-lwc-jest": "^7.0.2",
|
||||||
|
"eslint": "^9.29.0",
|
||||||
|
"eslint-plugin-import": "^2.31.0",
|
||||||
|
"eslint-plugin-jest": "^28.14.0",
|
||||||
|
"husky": "^9.1.7",
|
||||||
|
"lint-staged": "^16.1.2",
|
||||||
|
"prettier": "^3.5.3",
|
||||||
|
"prettier-plugin-apex": "^2.2.6"
|
||||||
|
},
|
||||||
|
"lint-staged": {
|
||||||
|
"**/*.{cls,cmp,component,css,html,js,json,md,page,trigger,xml,yaml,yml}": [
|
||||||
|
"prettier --write"
|
||||||
|
],
|
||||||
|
"**/{aura,lwc}/**/*.js": [
|
||||||
|
"eslint"
|
||||||
|
],
|
||||||
|
"**/lwc/**": [
|
||||||
|
"sfdx-lwc-jest -- --bail --findRelatedTests --passWithNoTests"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
22
reset-terminal.ps1
Normal file
22
reset-terminal.ps1
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Reset VSCode Terminal Script
|
||||||
|
# This script clears the terminal and resets common issues
|
||||||
|
|
||||||
|
Write-Host "Resetting VSCode Terminal Environment..." -ForegroundColor Green
|
||||||
|
|
||||||
|
# Clear the host
|
||||||
|
Clear-Host
|
||||||
|
|
||||||
|
# Reset PowerShell console
|
||||||
|
Write-Host "Clearing console..." -ForegroundColor Yellow
|
||||||
|
Write-Host ""
|
||||||
|
|
||||||
|
# Show current directory
|
||||||
|
Write-Host "Current Directory: $(Get-Location)" -ForegroundColor Cyan
|
||||||
|
|
||||||
|
# List current files to verify everything is accessible
|
||||||
|
Write-Host "Current Files:" -ForegroundColor Yellow
|
||||||
|
Get-ChildItem -Force | Format-Table -AutoSize
|
||||||
|
|
||||||
|
Write-Host ""
|
||||||
|
Write-Host "Terminal reset complete!" -ForegroundColor Green
|
||||||
|
Write-Host "You can now try running commands again." -ForegroundColor Green
|
||||||
10
scripts/apex/hello.apex
Normal file
10
scripts/apex/hello.apex
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
// Use .apex files to store anonymous Apex.
|
||||||
|
// You can execute anonymous Apex in VS Code by selecting the
|
||||||
|
// apex text and running the command:
|
||||||
|
// SFDX: Execute Anonymous Apex with Currently Selected Text
|
||||||
|
// You can also execute the entire file by running the command:
|
||||||
|
// SFDX: Execute Anonymous Apex with Editor Contents
|
||||||
|
|
||||||
|
string tempvar = 'Enter_your_name_here';
|
||||||
|
System.debug('Hello World!');
|
||||||
|
System.debug('My name is ' + tempvar);
|
||||||
6
scripts/soql/account.soql
Normal file
6
scripts/soql/account.soql
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
// Use .soql files to store SOQL queries.
|
||||||
|
// You can execute queries in VS Code by selecting the
|
||||||
|
// query text and running the command:
|
||||||
|
// SFDX: Execute SOQL Query with Currently Selected Text
|
||||||
|
|
||||||
|
SELECT Id, Name FROM Account
|
||||||
12
sfdx-project.json
Normal file
12
sfdx-project.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"packageDirectories": [
|
||||||
|
{
|
||||||
|
"path": "force-app",
|
||||||
|
"default": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "AgentForceTest",
|
||||||
|
"namespace": "",
|
||||||
|
"sfdcLoginUrl": "https://login.salesforce.com",
|
||||||
|
"sourceApiVersion": "65.0"
|
||||||
|
}
|
||||||
4
terminal-test.js
Normal file
4
terminal-test.js
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
// Simple terminal test script
|
||||||
|
console.log("Terminal test successful!");
|
||||||
|
console.log("Current working directory:", process.cwd());
|
||||||
|
console.log("Node.js version:", process.version);
|
||||||
Reference in New Issue
Block a user