Transcript: “Diving Deep into Profiles & Permissions”, Texas Dreamin’ 2025 Session, 2025-05-30

1
00:00:00.000 --> 00:00:02.240
Ezra Kenigsberg (he/him): Sound okay? Awesome sauce, all right.

2
00:00:03.300 --> 00:00:22.400
Ezra Kenigsberg (he/him): Hello, everybody. Welcome to the 11 o'clock session, "Diving Deep into Profiles and Permissions". The general intention of this is, sort of, mostly at an intermediate level. I'm not going to be doing anything terribly hardcore, as far as code goes--a little bit of SOQL. But it should be

3
00:00:22.690 --> 00:00:29.520
Ezra Kenigsberg (he/him): pretty familiar for folks who have, you know, been working with Salesforce for, say, a year or so, or anything beyond that.

4
00:00:31.570 --> 00:00:33.280
Ezra Kenigsberg (he/him): I put up a

5
00:00:34.924 --> 00:00:47.910
Ezra Kenigsberg (he/him): RFID RFID. I always forget what those are called 2D. Barcodes, 3D. Barcode. QR. Thank you. That's what I'm always forgetting. I put up a QR code that points directly at my website, which is Kudotek.com

6
00:00:50.180 --> 00:01:10.120
Ezra Kenigsberg (he/him): Kudotek.com, and the QR code are one and the same, the entire presentation is embedded there. So if, God forbid, you had to leave right now, you can still get all the goodness there! All the scripts that I'm going to be sharing with you are also available on the website, Kudotek.com, and via the QR code.

7
00:01:10.701 --> 00:01:27.028
Ezra Kenigsberg (he/him): Hi! Nice to meet you. The man choosing to play act, being a cowboy today is actually a New Yorker. I've lived in Austin, Texas for 13 years now, but grew up, born and raised in suburban New York, and lived in Manhattan

8
00:01:27.660 --> 00:01:55.110
Ezra Kenigsberg (he/him): after a long and strange career with Salesforce (worked for Salesforce for 6 years), I've worked for the last year-and-change now at Canva. Canva is a fantastic design site. If you need to design almost anything, print out a T-shirt, put up an Instagram post, make a website, make a presentation. As of last month, we now do spreadsheets. It's fantastic, and if you don't know about it, I encourage you to ask any child in your life, because Canva's

9
00:01:56.100 --> 00:02:08.729
Ezra Kenigsberg (he/him): very keen on sharing its product with the world, especially with the youth, and so pretty much anybody under the age of 18 in this country, you'll find, has Canva, and is a pretty enthusiastic user of it.

10
00:02:08.980 --> 00:02:14.390
Ezra Kenigsberg (he/him): All right. Let's get into it. First, to thank our sponsors.

11
00:02:14.910 --> 00:02:21.919
Ezra Kenigsberg (he/him): Their sponsorship is what makes this entire event possible. So big props to platinum sponsor Air--

12
00:02:23.140 --> 00:02:44.829
Ezra Kenigsberg (he/him): AirSlate and to our gold sponsors I can specifically speak to Gearset. I used Gearset both at my previous job and my current job, and I've been very pleased with it in my current job--wasn't so thrilled with it in my previous gig. But the number of improvements they've made, and the responsiveness they've shown, really impressed me. So I'm a fan of Gearset.

13
00:02:46.710 --> 00:02:55.419
Ezra Kenigsberg (he/him): All right. So what we're going to be talking about today, I like it to make these concepts real simple. So you can see that the way I've laid this out

14
00:02:55.440 --> 00:03:21.799
Ezra Kenigsberg (he/him): on the slide is not to say, here's a highfalutin concept with a whole bunch of adjectives and nouns next to it. But rather, let's think about it in terms of those you know 5 W's and an H kind of questions, Who? What? Where? When? Why, and How? When you're doing requirements gathering for a customer? Think in terms of these kinds of questions. You want to draw them out with open-ended questions. And so I'm hoping these feel like open, ended questions that'll make for a productive conversation today.

15
00:03:22.081 --> 00:03:34.180
Ezra Kenigsberg (he/him): On the topic of conversations. If I say something that isn't clear, please raise your hand. It's very likely that whatever I bring up that's mystifying you is mystifying somebody else in the room. So you're doing a favor to all of us.

16
00:03:34.250 --> 00:03:39.199
Ezra Kenigsberg (he/him): Okay, so why are we here? What are we working toward? And what are we working with.

17
00:03:39.300 --> 00:03:41.450
Ezra Kenigsberg (he/him): What are our tools, and how do we use them?

18
00:03:41.970 --> 00:03:47.710
Ezra Kenigsberg (he/him): So let's start with "Why are we here?" Well, in a galactic sense, we're here to participate in the human project.

19
00:03:48.390 --> 00:04:01.200
Ezra Kenigsberg (he/him): The appearance of self-aware tool using primates on an anonymous planet in orbit around an unremarkable star in a forgettable galaxy might just be the most important moment in the history of the universe. So let's all applaud ourselves for that.

20
00:04:05.190 --> 00:04:15.199
Ezra Kenigsberg (he/him): Okay, in a more practical sense. Why are we here in this room today? The answer is that we want to make our Salesforce orgs more secure and more efficient.

21
00:04:15.340 --> 00:04:28.675
Ezra Kenigsberg (he/him): As you all know, Salesforce has been releasing new features, new capabilities to their Salesforce instances 3 times a year for over, what? 15 years now? So this is a crazy, rapid

22
00:04:29.080 --> 00:04:45.719
Ezra Kenigsberg (he/him): pace to keep up with, and if we want our orgs to be the most secure they can be, and that we administer them as efficiently as possible, we need to stay on top of all the new stuff that they're doing, and we need to be smarter about how we're administering all the existing stuff that that it has.

23
00:04:46.720 --> 00:05:01.689
Ezra Kenigsberg (he/him): In particular, the big goal that I'm going to be chasing after today is creating what's called a Permission-Set-Led Model. Who administers a Salesforce org with more than, let's say,

24
00:05:01.980 --> 00:05:04.090
Ezra Kenigsberg (he/him): 20 custom Profiles in it?

25
00:05:05.770 --> 00:05:12.503
Ezra Kenigsberg (he/him): We got anybody over, say, 50 custom Profiles? Yeah. A couple. It's it's okay. I'm here for you.

26
00:05:14.860 --> 00:05:41.580
Ezra Kenigsberg (he/him): What I'm going to be talking about today is moving towards a security model that's a little more sane than that. This is nothing against anybody who has 50 or 100 Profiles, custom Profiles in their Salesforce instance, we're going to talk about how we got there, but I think that I can show you a path towards a little more security, a little more sanity in running your Salesforce org.

27
00:05:42.310 --> 00:06:00.559
Ezra Kenigsberg (he/him): So we're gonna talk about configuration for a moment when Salesforce originally launched in 1999, these 2 concepts that they had were those of Roles and Profiles. Whenever I'm talking with end users. And they're asking me about this? I explain that Role answers the question, "Who's my boss?" Profile answers the question, "What am I allowed to do?"

28
00:06:01.300 --> 00:06:09.040
Ezra Kenigsberg (he/him): The "Who's my boss?" question is relevant for the next 30 seconds. Because I'm talking about record visibility, you know, in Salesforce.

29
00:06:09.220 --> 00:06:15.850
Ezra Kenigsberg (he/him): Generally, every record has an owner, and so, if I own a record I generally have

30
00:06:16.080 --> 00:06:23.100
Ezra Kenigsberg (he/him): if not unlimited privileges to it, at least many, many privileges over it, the ability to edit it, delete it.

31
00:06:23.190 --> 00:06:31.950
Ezra Kenigsberg (he/him): and anyone who's above me in the Role Hierarchy has those similar privileges as well. So that's the relevance of the Role within Salesforce.

32
00:06:31.950 --> 00:06:55.380
Ezra Kenigsberg (he/him): Profile is the one that we generally hassle with more on a day-to-day basis, because it answers the question, "What am I allowed to do?" And, as everyone's fully aware, you must have a Profile for each and every user in your org. You don't have to have a Role for each and every user in your org, you should. But with a Profile, you're you're not getting away from it. One-and-only-one Profile applied to each and every user.

33
00:06:56.320 --> 00:07:14.210
Ezra Kenigsberg (he/him): The problem with that is that over time you start seeing more and more little use cases. You know, I have my Sales Rep, and then I have a Sales Manager, and the Sales Manager needs an incremental bit of permission that the Sales Rep doesn't have. Well, in the traditional world, I need to take that Profile, I need to

34
00:07:14.210 --> 00:07:31.030
Ezra Kenigsberg (he/him): make a clone of it. And then I need to add that incremental little bit of permission. You know, the ability to see one more field, the ability to do one more thing just for that Sales Manager. And so those tiny changes which are required to make these gargantuan new Profiles ends up being very unwieldy over time.

35
00:07:31.270 --> 00:07:55.770
Ezra Kenigsberg (he/him): That's why, Hallelujah! It was so wonderful that about 13 years ago now Salesforce introduced Permission Sets--the idea that we have to have these gargantuan Profiles which apply to one and only one, in a one-and-only-one way, is no longer relevant. Instead, Permission Sets allow us to be granular. So if that Sales Manager has one incremental bit of permission. I can create a Permission Set

36
00:07:55.770 --> 00:08:09.569
Ezra Kenigsberg (he/him): for that one granular thing, and I can assign it to multiple people. So many people can have a Permission Set many Permission Sets can be assigned to an individual. This gives me that many to many capability that wasn't available with Profiles.

37
00:08:10.840 --> 00:08:23.721
Ezra Kenigsberg (he/him): The innovations that have come since then that I think are really awesome: You also get Permission Set Groups. So now I can take a whole bunch of discrete Permission Sets, I can put them into a bundle, and I can assign that bundle to an individual.

38
00:08:24.019 --> 00:08:44.130
Ezra Kenigsberg (he/him): Over the last 2 years an innovation that, I'm surprised more people aren't shouting from the rooftops, are User Access Policies. I think this is awesome. User Access Policies are basically declarative triggers on the user record. So if I create a new user and I say, this is a Marketing Person on the West Coast.

39
00:08:44.130 --> 00:09:02.339
Ezra Kenigsberg (he/him): I can have a User Access Policy that says, Hey, Marketing People get these Permission Sets, West Coast people get these Permission Sets and bam, that's all automatically assigned to that user and any other users I should create or update to be that way. So those 2 capabilities, I think, are fantastic.

40
00:09:02.627 --> 00:09:17.610
Ezra Kenigsberg (he/him): Another one a lot of people are big fans of is the fact that with Permission Set Groups, you can also get Muting, the ability to take away selectively some permissions. I'm not going to be specifically touching on that one today. But I know people like it so much. I'm gonna mention it.

41
00:09:18.110 --> 00:09:47.580
Ezra Kenigsberg (he/him): Okay. So coming back to our big goal. We've got all these Profiles in our org. And we know that with this wonderful granularity, with this multiple assignment capability, we really ought to be in a Permission Set kind of world, we should stop worrying about Profiles. We should start thinking about assigning all of these privileges to our users based on Permission Sets. What's that gonna get us? Well, number one, that's what best enables what architects call the Principle of Least Privilege.

42
00:09:47.580 --> 00:09:56.459
Ezra Kenigsberg (he/him): The idea that if I'm going to allow someone to do something in my computer system, I want to give them the least amount of privilege they need in order to accomplish it.

43
00:09:56.480 --> 00:10:26.440
Ezra Kenigsberg (he/him): If a user is going to create an account. I don't give them System Administrator Profile, because that's way too much. Instead, I want to be conservative. I want to be parsimonious in what I assign out to those users, and that's far more easily done with Permission Sets than with Profiles. The beauty of Permission Sets too, also, if I name them well, it's almost like they self-document. If I say you know, read, write privileges on an account, and that's a Pro--a Permission Set that I assign to users.

44
00:10:26.690 --> 00:10:43.390
Ezra Kenigsberg (he/him): It's easy for anybody who comes in later and looks at my work to say, Oh, I understand. That person has read, write privileges over account, because that's the Permission Set they were assigned to. It's more future-proof. So these are the strengths of the Permission Sets that I encourage all of us to start moving toward.

45
00:10:43.993 --> 00:11:02.170
Ezra Kenigsberg (he/him): The stuff that I'm going to be referring to today. First, st I already mentioned my own website, Kudotek.com. I'm also going to be leveraging another website. It's bit.ly/permset. What's that bit.ly/permset? So glad you asked. Salesforce MVP Louise Lockie

46
00:11:02.370 --> 00:11:10.430
Ezra Kenigsberg (he/him): has been touting this particular presentation for the last year or 2. It's called "Applying a Permission-Set-Led Security Model".

47
00:11:10.860 --> 00:11:22.230
Ezra Kenigsberg (he/him): And it talks about the concepts that drive much of what I've just been describing to you: Why we want to move to Permission Sets as opposed to Profiles; a minimal Profile model;

48
00:11:22.670 --> 00:11:28.910
Ezra Kenigsberg (he/him): a proposed promised land you can move to of Permission Sets and Permission Set Groups;

49
00:11:29.130 --> 00:11:31.080
Ezra Kenigsberg (he/him): and the next steps that you'll take.

50
00:11:31.990 --> 00:11:43.550
Ezra Kenigsberg (he/him): In particular. I'm going to touch just for a moment on that minimal Profile model. Louise proposes having 3, and only 3, Profiles that you apply to all the users in your org.

51
00:11:44.090 --> 00:11:51.620
Ezra Kenigsberg (he/him): Number one, you have a Profile for your System Administrator. You can easily either use the standard System Administrator Profile, or a custom one.

52
00:11:51.890 --> 00:12:10.780
Ezra Kenigsberg (he/him): For end users, she recommends that you take the Minimum Access Profile that now comes standard in an org, make a clone of it and give it some very minimal settings. Here things like password policies or system settings. IP ranges. You know, IP login restrictions. That's the stuff that you're going to put

53
00:12:10.780 --> 00:12:25.680
Ezra Kenigsberg (he/him): in that end user Profile. But that's it. Nothing as far as accessing objects. And then, similarly, you're going to create an Integration Profile for all the integrations that your Salesforce instance has with other systems.

54
00:12:26.380 --> 00:12:35.459
Ezra Kenigsberg (he/him): Remember that the Integration License is distinct from the sales--from, you know, the full Salesforce license. And so this is what prevents us from paying Salesforce

55
00:12:35.610 --> 00:12:40.329
Ezra Kenigsberg (he/him): even more money than we already do each month for the privilege of having integrations.

56
00:12:43.160 --> 00:13:02.830
Ezra Kenigsberg (he/him): Louise also recommends that then, on top of that you lay these Permission Sets, and Permission Set Groups. This is where we get into "art, not science" kinds of questions, because she recommends going for it in more of a Role-based kind of way, she says, make a Permission Set that's called something like, you know, "Sales Person"

57
00:13:03.277 --> 00:13:31.199
Ezra Kenigsberg (he/him): "Support Person", "Marketing Person". Me, personally, I think I'm more inclined to say, I would rather have them be named after what kinds of permissions they give you. So you know, "Account Read/Write", or "Opportunity Read-Only". But this is, again, a subjective kind of call. If you feel better about having it be called, you know, "Sales Person", go for it. If you like more ones that are practical, go for it. "Art, not science".

58
00:13:32.690 --> 00:13:37.840
Ezra Kenigsberg (he/him): Okay. So wow, okay, let me try this.

59
00:13:41.270 --> 00:13:43.900
Ezra Kenigsberg (he/him): I promise not to cough into the microphone ever again.

60
00:13:45.916 --> 00:14:00.950
Ezra Kenigsberg (he/him): What are the tools? The tools that we're going to be using today for a little walkthrough are the following 4, and they're all free. I'm a big nut for free tools. So actually, I'll be interested to see who has used Salesforce Inspector Reloaded?

61
00:14:01.520 --> 00:14:07.330
Ezra Kenigsberg (he/him): Pretty cool, all right. So maybe half to 2 thirds of the room who's used Visual Studio Code?

62
00:14:08.580 --> 00:14:11.470
Ezra Kenigsberg (he/him): about the same. ChatGPT?

63
00:14:12.306 --> 00:14:19.239
Ezra Kenigsberg (he/him): I get 2 hands up over here. It's interesting. That seemed to be actually even more people than we had before. And who's used a Workbench?

64
00:14:20.130 --> 00:14:29.149
Ezra Kenigsberg (he/him): Yeah. Oh, wow, okay, very interesting to see. So ChatGPT and Workbench seem to have more users than some of the earlier tools I mentioned here.

65
00:14:29.960 --> 00:14:57.449
Ezra Kenigsberg (he/him): as I mentioned here, Inspector Reloaded, is, we're going to be using very much as a Swiss Army Knife kind of tool. It does so many wonderful things. Visual Studio Code, as you may have seen in another presentation. Here is a terrific text editor. ChatGPT is just one of numerous AI tools out there. I specifically used it for this presentation because my company gave me a corporate license for using it so I could make more mistakes frequently with it before it

66
00:14:57.530 --> 00:15:15.410
Ezra Kenigsberg (he/him): limited. Yeah, no, no. With ChatGPT, I first started doing stuff in a free mode, and it would let me do a bit. Let me do a bit. And then it would say, Okay, you can't upload any more files for another 24 hours, and I kind of went all right. I better go to a different AI. And then I said, Oh, wait! Canva allows me to get a corporate license. So I got the corporate license.

67
00:15:16.223 --> 00:15:35.000
Ezra Kenigsberg (he/him): Hopefully. I've gone through all that burdensome trial-and-error so that you don't have to. If you want to use a free version of ChatGPT, go with God. If there's a different AI that you prefer, give it a whirl and actually let me know what you find out. I would love to hear from folks what their results are.

68
00:15:35.280 --> 00:15:45.189
Ezra Kenigsberg (he/him): And then finally, Workbench, it has a bunch of different, wonderful utilities. For purposes of this session, I'm going to be using it to deploy Salesforce configuration.

69
00:15:46.140 --> 00:15:47.250
Ezra Kenigsberg (he/him): So?

70
00:15:47.420 --> 00:16:02.540
Ezra Kenigsberg (he/him): Let's use them, man! Again, we're moving towards a Permission Set led model. And the way we're going to do that we're going to try and consolidate Profiles instead of having, say 3 custom Profiles. Let's turn them into Permission Sets.

71
00:16:03.160 --> 00:16:22.870
Ezra Kenigsberg (he/him): I was tempted to do this with Canva's, own actual configuration here, and realized I would be over sharing a little bit too much. So I had to go with a somewhat more anodyne example. In particular, what I've done is I've gone to developerforce.com, and signed up for a Developer Edition.

72
00:16:22.970 --> 00:16:35.739
Ezra Kenigsberg (he/him): You can do this. You can walk through these exact same steps doing exactly what I just did here. You sign up for a Developer Edition. It comes with 3 custom Profiles, one for Marketing, one for Sales, one for Support.

73
00:16:37.670 --> 00:16:49.390
Ezra Kenigsberg (he/him): And what we're going to do is say, "Hey, I want to move the users in that Developer Edition org from those 3 Profiles to Permission Sets". How would I do it?

74
00:16:49.690 --> 00:17:05.259
Ezra Kenigsberg (he/him): These 4 steps, which happen to correspond to the 4 tools I showed you on the previous slide: 1 We're going to extract Profiles; 2 We're going to take a look at those Profiles; 3 We're going to analyze and create merged Perm Sets; 4 And then we're going to load that stuff into Salesforce.

75
00:17:05.819 --> 00:17:10.869
Ezra Kenigsberg (he/him): And I agree with you. That's the weirdest looking ampersand I have ever seen.

76
00:17:11.160 --> 00:17:14.359
Ezra Kenigsberg (he/him): It's like it's an E. It I--

77
00:17:15.120 --> 00:17:32.289
Ezra Kenigsberg (he/him): Alright! So let's get to it. Salesforce Inspector Reloaded, is a tool that you install as an extension onto your Chrome browser, or if you're as paranoid about security as me, you use the Brave browser. I think you can also use Microsoft Edge as a Chrome-based browser. So

78
00:17:32.390 --> 00:17:37.560
Ezra Kenigsberg (he/him): any browser that works like Chrome you can install Salesforce Inspector Reloaded

79
00:17:37.870 --> 00:17:49.619
Ezra Kenigsberg (he/him): when you click on a new little widget that it installs on the right hand edge of your page. You get this lovely little menu, and you get a button here after you scroll down a bit that says "Download Metadata".

80
00:17:50.010 --> 00:18:04.240
Ezra Kenigsberg (he/him): I feel a little bad jumping straight to "Download Metadata", because there's some really awesome features above this. You know, the "View All Data" button I would use, I would say I use multiple times per day, and it's fantastic. And I'm not talking about it today.

81
00:18:05.160 --> 00:18:07.660
Ezra Kenigsberg (he/him): But when I click on "Download Metadata",

82
00:18:07.790 --> 00:18:29.539
Ezra Kenigsberg (he/him): it gives me a screen like this, with all the different bits of metadata that I can pull from Salesforce. And if I were to say, Hey, cool! I want to look at all my Profiles. I click on Profiles and hit "Download Metadata". Again, this is the kind of thing that you can totally do with tools like SFDC and the Command Line Interface, and you got Git and GitHub and all that jazz.

83
00:18:30.360 --> 00:18:42.909
Ezra Kenigsberg (he/him): I personally feel a little schitzy when I start dealing with all that Command Line stuff. And so I was excited to find that there was a free way of pulling down these XMLs without having to fuss with that.

84
00:18:43.770 --> 00:19:03.129
Ezra Kenigsberg (he/him): So we pull that stuff down. We get a little Zip file, and when I open it up we can see a listing of all my Profiles. They're XMLs, and those 3 XMLs are listed right there. And I'm so excited I open up one of those XMLs in tool number 2, Visual Studio Code. This is just an ordinary text file.

85
00:19:03.340 --> 00:19:10.389
Ezra Kenigsberg (he/him): And I say, Hey, cool! Look at that. I've got all my Permissions, and and something's a little bit funny.

86
00:19:13.040 --> 00:19:34.770
Ezra Kenigsberg (he/him): It's always good to have your built-in BS Detector going, and what I'd hope that you might notice when you look at a Profile XML here is, you might see that even though it typically lists Permissions alphabetically, I don't see anything before the letter U, User Permissions listed here. Where are my Field Permissions? Where are my Object Permissions? Where are my Tab Permissions?

87
00:19:34.770 --> 00:19:48.049
Ezra Kenigsberg (he/him): They didn't seem to show up, and this file, which I know from experience, frequently runs into the thousands of lines only appears to be 153 lines. So again, getting a good built in BS Detector, as

88
00:19:48.190 --> 00:20:09.149
Ezra Kenigsberg (he/him): Ernest Hemingway said, is one of the most important tools you'll ever need in this life. Certainly applies to working with Salesforce as well. Your built in BS Detector should say, Oh, something was wrong here, and the thing that was wrong is that Salesforce's Metadata API. The path through which you access configuration in Salesforce

89
00:20:09.410 --> 00:20:37.389
Ezra Kenigsberg (he/him): demands that if you're going to get information about Object Permissions and Field Permissions when you're looking at your Profiles, you need to download the Objects as well as the Profiles. This is just the way the Metadata API works, and if you use tools like Gearset, if you use tools like Copado, they're going to have some sort of a dance you need to do where you're going to say, "If I want to mess with a Profile, I need to kind of bring the Object along with me for the ride".

90
00:20:37.960 --> 00:20:44.719
Ezra Kenigsberg (he/him): So if I download using Objects AND Profiles, and then I look at that Zip file,

91
00:20:44.720 --> 00:21:09.429
Ezra Kenigsberg (he/him): I'll see here that previously those files looked like they were 4 kilobytes apiece, 153 lines, and now they seem to be a good deal larger. 160 K apiece. So my built in BS Detector is going, "Okay. I think that looks all right". And when I open these up in Visual Studio Code, I see that the first things listed are not my user permissions, but instead, my Field Permissions, and below that, the Object

92
00:21:09.430 --> 00:21:17.589
Ezra Kenigsberg (he/him): and the Tab Permissions la la la, and it all goes more than 4,000 lines. So that's what tells me. Okay, now, I have a real

93
00:21:17.590 --> 00:21:24.809
Ezra Kenigsberg (he/him): Profile XML, that I can work with. Cool! So now let's start talking to our AI. What can I do

94
00:21:24.850 --> 00:21:39.719
Ezra Kenigsberg (he/him): with those Profiles that I just downloaded? Well, back in the day I would look in Salesforce, and I would compare them, or I'd look at those Profile. XMLs and I try to compare them. Do compare-and-contrast, slam it into Excel, and you know, diff all this stuff.

95
00:21:40.540 --> 00:21:48.700
Ezra Kenigsberg (he/him): I don't expect you to, you know, spend much time worrying about the script. Again. I put.

96
00:21:49.720 --> 00:21:54.390
Ezra Kenigsberg (he/him): I put the entire scripts that I'm using here on my website.

97
00:21:54.550 --> 00:22:08.379
Ezra Kenigsberg (he/him): So feel free to copy and paste all this stuff later. All the trial-and-error I did, I don't want to inflict that on anybody else. So: bad artists borrow, good artists steal. Let's all be good artists.

98
00:22:10.340 --> 00:22:14.462
Ezra Kenigsberg (he/him): But get out of my way. There we go.

99
00:22:14.930 --> 00:22:38.919
Ezra Kenigsberg (he/him): So here is the script that I handed to ChatGPT. Instead of living in the 20th century world, where I make a spreadsheet, and then laboriously do these compare and contrast. I say, to ChatGPT, "hey, man, do the comparison for me". And so I tell it, "Field Permissions, Object Permissions, Record Types, Tab Visibilities, User Permissions"--for these 3 Profiles that I upload to it--"compare it for me".

100
00:22:39.170 --> 00:23:00.399
Ezra Kenigsberg (he/him): And when I compare it, it creates these beautiful little tables that say, "Hey, for the account for the Marketing User. You can do this. For the Account for the Sales User, they can do that. For the Account for this Support User, they can do the other thing". And I get these lovely little tables spat out by GPT, ChatGPT. And I say, "that's awesome".

101
00:23:02.330 --> 00:23:12.919
Ezra Kenigsberg (he/him): And then it even follows up. "Okay, I created those for you. Would you like a summary of the key differences or a downloadable Excel version? And I say, Oh, yeah, downloadable Excel".

102
00:23:13.720 --> 00:23:31.079
Ezra Kenigsberg (he/him): and boom, just like that. I get a spreadsheet with all the tabs broken out, and these comparisons done for me. So this this was the presentation that when I firts pitched the Texas Dreamin people on this back in January, I said, This is cool, ain't this great? I'm going to do a whole presentation about that.

103
00:23:31.790 --> 00:23:33.560
Ezra Kenigsberg (he/him): And then something happened.

104
00:23:33.700 --> 00:23:46.939
Ezra Kenigsberg (he/him): I had a momentary "Aha" after speaking to a friend about how in his organization they were running all of the configuration of their systems from ChatGPT.

105
00:23:48.100 --> 00:23:49.870
Ezra Kenigsberg (he/him): and what I realized was,

106
00:23:50.060 --> 00:23:56.570
Ezra Kenigsberg (he/him): instead of stopping at the comparison, and then me going and doing some pointing-and-clicking in Salesforce.

107
00:23:56.840 --> 00:24:05.449
Ezra Kenigsberg (he/him): Why don't I have ChatGPT do the pointing-and-clicking for me? And so here I instead told ChatGPT:

108
00:24:05.930 --> 00:24:08.940
Ezra Kenigsberg (he/him): "Hey, man, create the configuration I need".

109
00:24:09.210 --> 00:24:18.050
Ezra Kenigsberg (he/him): And so you can see, this prompt begins with "Create a Salesforce Metadata API-deployable Zip file that contains a Permission Set".

110
00:24:18.290 --> 00:24:26.231
Ezra Kenigsberg (he/him): So this I think this is, you know, the best thing, since sliced bread. Instead of getting into

111
00:24:27.080 --> 00:24:36.529
Ezra Kenigsberg (he/him): Command Line stuff, instead of doing a lot of pointing-and-clicking through the Salesforce administrative UI, I told ChatGPT, "Hey, man, just make it for me".

112
00:24:37.120 --> 00:24:43.590
Ezra Kenigsberg (he/him): The specifics, I'm not going to sweat you too much about. Basically ChatGPT, after I gave it this prompt,

113
00:24:45.020 --> 00:24:49.030
Ezra Kenigsberg (he/him): created this for me, a Zip file that I downloaded to my computer.

114
00:24:49.440 --> 00:24:57.569
Ezra Kenigsberg (he/him): And this just happens to be the way that Salesforce's Metadata API wants XMLs given to it.

115
00:24:58.390 --> 00:25:19.689
Ezra Kenigsberg (he/him): If I look in these files, the "Common Permissions" Permission Set that I've created here looks like this in Visual Studio Code. Again, a quick smell test. I can see it begins with Field Permissions, and if I scroll down in it, it has my Object Permissions. La, la, la, and I look at this other file, which is called "package.xml". It's sort of like a table of contents.

116
00:25:19.930 --> 00:25:25.729
Ezra Kenigsberg (he/him): And it shows, yup, I've got a Permission Set named "Common Permissions", and I'm good to go.

117
00:25:26.280 --> 00:25:36.469
Ezra Kenigsberg (he/him): Good to go where? So glad you asked! The 4th tool that we've used, remember, we started with Salesforce Inspector Reloaded. That's how we pulled down those Profiles.

118
00:25:36.650 --> 00:25:42.550
Ezra Kenigsberg (he/him): Second tool was Visual Studio Code, which is how we inspected the XML Profiles to make sure they were good.

119
00:25:42.870 --> 00:25:56.879
Ezra Kenigsberg (he/him): 3rd tool was ChatGPT, which created this Zip file, and then the 4th tool is how we give that Zip file to Salesforce. That tool is called Workbench. It's found at workbench.developerforce.com.

120
00:25:57.220 --> 00:26:11.660
Ezra Kenigsberg (he/him): Once you log into it, you can do tons of cool stuff with SOQL queries. You can do tons of cool stuff with its various endpoints. The specific thing we're going to be using it for today is that when I click on the Migration menu and I hit Deploy,

121
00:26:12.180 --> 00:26:17.819
Ezra Kenigsberg (he/him): it says, "Okay, what Zip file do you want to give me?" And I tell it, "here's my Zip file".

122
00:26:18.480 --> 00:26:26.120
Ezra Kenigsberg (he/him): I'm doing this in a very kind of Julia Child/skipping over a lot of, you know, like, when the turkey is actually cooking in the oven kind of stuff.

123
00:26:26.597 --> 00:26:47.809
Ezra Kenigsberg (he/him): Because it's a 45 min presentation. But nevertheless, I give the Zip file. I say, yes, this is a single package, and then I get a result screen that looks like this. It says, Yep, I succeeded. These are the components that succeeded. And then, when I log into Salesforce: Booyah! Right there I have a new Permission Set that it created for me called "Common Permissions".

124
00:26:47.930 --> 00:26:49.000
Ezra Kenigsberg (he/him): So

125
00:26:49.200 --> 00:27:02.673
Ezra Kenigsberg (he/him): step one. In moving our users from a Profile world to a Permission-Set-Led world is now complete. I have made a Permission Set for all of my users who all have these

126
00:27:03.260 --> 00:27:04.630
Ezra Kenigsberg (he/him): privileges in common.

127
00:27:06.950 --> 00:27:26.349
Ezra Kenigsberg (he/him): I would say, this is grounds for celebration, and I figured, well, let's have ChatGPT do the celebration for us. So I asked it to take the lovely clip art they gave me of an armadillo, and let's make it into a 3-second repeating, animated GIF file of the armadillo dancing happily. Check it out: it created this!

128
00:27:32.120 --> 00:27:35.290
Ezra Kenigsberg (he/him): you would think that a guy who works at Canva would be better with the

129
00:27:35.690 --> 00:27:44.610
Ezra Kenigsberg (he/him): say, sorry, I'm just too much of a Salesforce nerds. Alright, so I'll get to it. I'll work on it, I promise. Next presentation. I'll have something better for you. But there's your dancing armadillo.

130
00:27:44.720 --> 00:27:56.099
Ezra Kenigsberg (he/him): Okay? So to recap what we just did, this is the kind of thing that before, and in particular, the AI was really, you know the thing that made this wonderful.

131
00:27:56.470 --> 00:28:17.829
Ezra Kenigsberg (he/him): We just circumvented tedious hours of what we would have done in the past, you know, looking at Profile information comparing those XMLs or stuff in the UI, and then creating that "Common Permissions" Perm Set. We did all of that in less than about 20 minutes. All right. 25. We did all of that very, very quickly, thanks to AI.

132
00:28:18.250 --> 00:28:38.520
Ezra Kenigsberg (he/him): Okay, you go "alright. That's what, that's cool. But wait a minute. You're holding out on me. What about the unique permissions that are specific to individual Profiles?", you know. Maybe the sales guy can do something that the support woman can't do, and you might also say, "Alright, great! But then we need to actually reassign those users after we set up those Permission Sets".

133
00:28:38.840 --> 00:28:59.320
Ezra Kenigsberg (he/him): Once more into the breach, let's go for it! What's awesome is, this time? We've already downloaded those Profiles. We already circumvented that little gotcha of making sure to get information about Profile, Objects, and fields. So now all we need to do are the latter 2 steps in our process, the ChatGPT thing and the Workbench thing.

134
00:28:59.510 --> 00:29:11.060
Ezra Kenigsberg (he/him): Really, what this is about is telling ChatGPT the right thing, and I've gone through the trouble of this for you. By the way, I should, you know issue the caveat disclaimer.

135
00:29:11.160 --> 00:29:37.090
Ezra Kenigsberg (he/him): Might it not work tomorrow? It might not work tomorrow. This is one of the beauties and completely mystifying things about these transformers that we're working with. Nobody truly understands how they work. You don't need to take it from me. You can take it from--not perplexity. What's the Dario Amodei, the CEO of--

136
00:29:37.640 --> 00:30:03.109
Ezra Kenigsberg (he/him): --of Anthropic. Thank you. Dario Amodei, the CEO of Anthropic, says, this is the 1st time in human history we have an invention where we don't really understand how it works. Okay, that's kind of weird. It would be very difficult for you to build a car if you didn't understand how an internal combustion engine works. But we have AIs, things that create stuff for us, and we don't really grok how they're doing it.

137
00:30:03.680 --> 00:30:06.869
Ezra Kenigsberg (he/him): That shouldn't be taken as an advertisement for Grok.

138
00:30:08.840 --> 00:30:28.479
Ezra Kenigsberg (he/him): But anyway, here so: big, long, prompt. ChatGPT. I give it these really verbose Permission Set names that I want it to explicitly tell me, like, Hey, am I gonna let the user create? Am I gonna let the user delete? How many fields are they gonna have view access to? How many fields are they gonna have edit access to? La, la, la: more script, script, script, script.

139
00:30:30.770 --> 00:30:32.240
Ezra Kenigsberg (he/him): And it gave me this.

140
00:30:32.747 --> 00:30:55.909
Ezra Kenigsberg (he/him): It went through, methodically, my 3 custom Profiles, and it figured out, oh, okay, well, the Sales guy can only do that, and the Support and Marketing people can only do this, and la la! It created these 9 Permission Sets across 4 objects that have permissions that are specific to one or more of my custom Profiles, but not all of them.

141
00:30:59.220 --> 00:31:00.800
Ezra Kenigsberg (he/him): Go in and look at it.

142
00:31:01.420 --> 00:31:30.689
Ezra Kenigsberg (he/him): Why didn't it pretty-print this XML? I'm not quite sure, I thought I told it to. But again, this is one of those "Your Mileage May Vary" kinds of things. Get into these AIs, start using them, because this is where our jobs are going, people. You're going to hear Leah McGowan-Hare this afternoon, and I'm going to steal her best line right now because it's really good. She says, today's learners get tomorrow's jobs.

143
00:31:31.900 --> 00:31:43.489
Ezra Kenigsberg (he/him): Today's learners get tomorrow's jobs. So start messing with this stuff right now, steal these scripts, tune them for your own purposes, because they're going to make you so much more effective.

144
00:31:43.960 --> 00:31:46.670
Ezra Kenigsberg (he/him): You are not going to lose your job to an AI.

145
00:31:46.990 --> 00:31:50.939
Ezra Kenigsberg (he/him): You might lose your job to a person who uses an AI. [credit to Scott Galloway for this line.]

146
00:31:55.140 --> 00:31:59.709
Ezra Kenigsberg (he/him): So ChatGPT created these Permission Sets for me.

147
00:32:00.200 --> 00:32:04.580
Ezra Kenigsberg (he/him): I used Workbench again to upload them, and I get the happy little message.

148
00:32:04.990 --> 00:32:11.570
Ezra Kenigsberg (he/him): And sure enough, when I go into Salesforce, I see it's created all of these Permission Sets for me.

149
00:32:14.080 --> 00:32:24.289
Ezra Kenigsberg (he/him): Next step: I want to reassign those users. This isn't quite as simple as it sounds, remember, not only do we need to take those users and assign them to minimal Profiles.

150
00:32:24.550 --> 00:32:35.230
Ezra Kenigsberg (he/him): but we then need to make sure that we assign the correct Permission Sets to them. But again, this is no longer a programming task. This is now a prompt-writing task.

151
00:32:35.700 --> 00:32:44.459
Ezra Kenigsberg (he/him): And me? Just trial and error. I told it kind of like, okay, well, here are all the Permission Sets that you kindly created for me in the previous step.

152
00:32:45.290 --> 00:32:55.970
Ezra Kenigsberg (he/him): Please take the people that had these custom Profiles and assign them to the new Permission Sets, and once I ran that it gave me Apex code

153
00:32:56.310 --> 00:33:03.429
Ezra Kenigsberg (he/him): for doing this. There are probably a couple different ways I could have implemented this, but I particularly wanted to use Apex code.

154
00:33:03.860 --> 00:33:09.939
Ezra Kenigsberg (he/him): So it gave me Apex code. Who has used Salesforce's Developer Console?

155
00:33:11.750 --> 00:33:22.880
Ezra Kenigsberg (he/him): Awesome. Almost everybody, not quite everybody. So pardon me, the the next bit, guys. I encourage you to go check out Developer Console. If I have

156
00:33:24.485 --> 00:33:33.594
Ezra Kenigsberg (he/him): an org like, oh, my God. This this is how old school I am. I've been using Salesforce for 20 years, and I'm still cranky about Lightning. Okay.

157
00:33:34.450 --> 00:33:39.480
Ezra Kenigsberg (he/him): Totes Totes. No, no, no, like. I have a little utility that like switches me back to Classic, like,

158
00:33:39.630 --> 00:33:45.120
Ezra Kenigsberg (he/him): cranky man. Okay, Developer Console.

159
00:33:45.726 --> 00:33:49.389
Ezra Kenigsberg (he/him): I'm an Administrator. I'm logged into my org. I click--

160
00:33:49.949 --> 00:33:56.300
Ezra Kenigsberg (he/him): let's make that bigger--I click on the little gear in the upper right-hand corner and it brings up Developer Console.

161
00:33:56.860 --> 00:34:01.119
Ezra Kenigsberg (he/him): This is where nerds live and love.

162
00:34:01.420 --> 00:34:04.989
Ezra Kenigsberg (he/him): And in particular, if I click on the Debug menu.

163
00:34:06.340 --> 00:34:12.790
Ezra Kenigsberg (he/him): Yeah, if I click on the Debug menu and hit Open Execute Anonymous Window.

164
00:34:13.010 --> 00:34:25.039
Ezra Kenigsberg (he/him): this spot is where I can run code. I can just grab code and without having to create classes inside of Salesforce, I can just run Apex code and nerds love this.

165
00:34:30.330 --> 00:34:53.880
Ezra Kenigsberg (he/him): So it gave me the code that I can run in the Execute Anonymous window, and it gave me a nice little summary of what it's gonna do. It's gonna reassign users from their existing custom Profiles to this minimal Profile, it's gonna add users to the "Common Permissions" Permission Set, and then it will assign the appropriate Permission Sets that corresponded to the ones that they have in their Profiles.

166
00:34:55.010 --> 00:34:58.430
Ezra Kenigsberg (he/him): It gave me code. I copied it from ChatGPT.

167
00:34:58.620 --> 00:35:05.499
Ezra Kenigsberg (he/him): I pasted it into that anonymous window, and then I ran it. And I go from having a user that looked like this.

168
00:35:06.150 --> 00:35:09.390
Ezra Kenigsberg (he/him): Greg Kaiser-Benz, by the way,

169
00:35:09.570 --> 00:35:21.539
Ezra Kenigsberg (he/him): totally aside everything I strongly recommend you do this. Come up with your own pseudonym. Take the letters in your name, mix them around and come up with a fake name, Ezra Kenigsberg becomes "Greg Kaiser-Benz". So there you go.

170
00:35:22.280 --> 00:35:25.489
Ezra Kenigsberg (he/him): if I ever, you know, disappear with millions of dollars, just,

171
00:35:25.650 --> 00:35:45.359
Ezra Kenigsberg (he/him): look for Greg Kaiser-Benz, and you'll have found me. So there you can see, there is the Profile, the custom Sales Profile that Greg had been assigned to. He was assigned to 0 Permission Sets, and after I've run the code, boom! The Profile is now "Minimum Access - Salesforce" and the number of Permission Set assignments has

172
00:35:45.360 --> 00:35:56.360
Ezra Kenigsberg (he/him): bumped up to 5. And of those 4 Objects where Greg had custom Sales Permissions--Case, Lead, Opportunity, and Solution--he now is assigned to one of those,

173
00:35:56.815 --> 00:36:07.300
Ezra Kenigsberg (he/him): assigned to 4 of those 9 Permission Sets that ChatGPT created for me. So this is it, man, this

174
00:36:07.770 --> 00:36:33.860
Ezra Kenigsberg (he/him): a. Again. I'm doing this a little hand-wavy, a little Julia Child, because I wasn't working with, you know, real Permission Sets. I'm doing this in a demo org. You'd wanna step back and walk through this a little more methodically. You want to talk to your users. You want to do the change management. But this is the basics of dramatically changing how we administer Salesforce much more easily than we ever could before.

175
00:36:33.890 --> 00:36:37.869
Ezra Kenigsberg (he/him): This blew my mind, and I thought of this as super-exciting.

176
00:36:39.420 --> 00:36:48.229
Ezra Kenigsberg (he/him): Bonus Round! If you were dying to know what my presentation was going to be when I thought of it back in January, we're gonna take a little time for that right now.

177
00:36:48.781 --> 00:37:02.780
Ezra Kenigsberg (he/him): I've been very excited over the last year in working with one of my new colleagues here. To find out about the PermissionSet and FieldPermissions Objects that exist in Salesforce.

178
00:37:03.370 --> 00:37:10.719
Ezra Kenigsberg (he/him): I'll get to that in a second. First and foremost, has anybody used the "View Summary" button yet?

179
00:37:12.421 --> 00:37:16.040
Ezra Kenigsberg (he/him): Okay, for the rest of you. I'm making your day.

180
00:37:16.200 --> 00:37:23.919
Ezra Kenigsberg (he/him): view summary. Okay, when you're on a Profile, when you're on a Permission Set [CORRECTION: I shouldn't have said "Profile"--it's available for Permission Sets and Users], when you're in, I'm not sure--

181
00:37:24.240 --> 00:37:35.529
Ezra Kenigsberg (he/him): User record. You can click on "View Summary", and you get this amazing looking thing down here at the bottom. Here you get a table with little tabs in it that summarize

182
00:37:35.870 --> 00:37:48.640
Ezra Kenigsberg (he/him): what that User, what that Permission Set, what that Profile can do [CORRECTION: not Profiles--just Users and Permission Sets]. So if you go to Object Permissions in the case of this Permission Set it says, Hey, you've got one Object, and you've got CRUD permissions over it.

183
00:37:49.600 --> 00:38:06.290
Ezra Kenigsberg (he/him): If I click on another tab like Field Permissions, it lists all the fields. This saves me the trouble of having to do all that laborious navigating through the Profile, through the Permission Set, through the User, that I had to do previously. So: "View Summary". It came out over the last year. This is your new, best friend.

184
00:38:08.000 --> 00:38:27.809
Ezra Kenigsberg (he/him): Now, if you were doing this through the API, you do it a little differently. Because I love Salesforce Inspector Reloaded so much. I'm showing you a screenshot of how you would get this from Salesforce Inspector Reloaded. You click on a command called "Data Export". It lets you put together a little SOQL query.

185
00:38:29.180 --> 00:38:39.460
Ezra Kenigsberg (he/him): and you can see that you can query. And this is a normal table. Just the same way you would query Accounts, or Leads, or Opportunities, or what have you? You can query

186
00:38:39.700 --> 00:38:48.260
Ezra Kenigsberg (he/him): FieldPermissions--and FieldPermissions, which is the child of a parent record called PermissionSet,

187
00:38:48.620 --> 00:39:11.000
Ezra Kenigsberg (he/him): enables you to spit out information like this, you can see. Oh, wow! Here's the list of all my Permission Sets, and here are all the fields, and what I can do to those fields. This is a listing, not of just one Permission Set, but all of my Permission Sets. So I download this jazz. I've got all the goods on all of my Permission Sets with a single command.

188
00:39:11.100 --> 00:39:38.070
Ezra Kenigsberg (he/him): I think that's awesome, and the thing that really blew me away (as of January) was that these records, the Permission Set record in Salesforce, and the FieldSettings [meant to say "FieldPermissions"] record in Salesforce are read/write. So you can create new Permission Sets using Salesforce's API, you could go into Data Loader and say, "Hey, I need to create a 'Read/Write All Account Fields' PermSet,

189
00:39:38.490 --> 00:39:47.120
Ezra Kenigsberg (he/him): 'Read/Write All Opportunities' PermSet, 'Read/Write All Case Fields' PermSet. I could do it for all of the Objects in my entire org with a single command.

190
00:39:47.470 --> 00:39:48.240
Ezra Kenigsberg (he/him): So

191
00:39:49.980 --> 00:40:02.559
Ezra Kenigsberg (he/him): this blew my mind. I thought this was amazing. Cool. And so what I'm going to demonstrate very quickly is how you could do it for creating a single Permission Set. But there's no reason the principles that I'm showing here couldn't be used to create

192
00:40:02.710 --> 00:40:26.359
Ezra Kenigsberg (he/him): a library of Permission Sets across your entire org, so that in this process of moving from custom Profiles--which are big and clunky--to sleeker, sexier Permission Sets, I have all of these Permission Sets set up for me, and just like a coat rack, I can just pluck one off the coat rack and say, "my Sales Manager gets all these Permissions on Accounts". There he goes.

193
00:40:29.180 --> 00:40:37.630
Ezra Kenigsberg (he/him): So I created a prompt for ChatGPT to do so for me, and was surprised to find, actually, this required

194
00:40:41.355 --> 00:40:44.310
Ezra Kenigsberg (he/him): (coughs) man. froggy.

195
00:40:45.950 --> 00:40:52.190
Ezra Kenigsberg (he/him): This required more doing than almost all the previous stuff that I've been showing to you.

196
00:40:52.380 --> 00:41:07.780
Ezra Kenigsberg (he/him): In order for me to have ChatGPT create these records using the FieldPermissions object and the PermissionSet Object, I needed to actually do a lot of fairly technical stuff that was kind of tedious.

197
00:41:07.990 --> 00:41:11.870
Ezra Kenigsberg (he/him): In particular, we can see here. I had to tell it like, well.

198
00:41:12.490 --> 00:41:15.440
Ezra Kenigsberg (he/him): refer to the EntityParticle table

199
00:41:15.610 --> 00:41:38.970
Ezra Kenigsberg (he/him): which uses the Tooling API and get this attribute that I hadn't heard about before called IsPermissionable, and it tried to refer to the base URL using the wrong method, and I had to set up a Remote Site Setting record. So anyway, this is a long-winded way of saying that these 5 different things? This was a little deeper

200
00:41:39.180 --> 00:41:40.839
Ezra Kenigsberg (he/him): than I wanted to get,

201
00:41:40.950 --> 00:41:57.650
Ezra Kenigsberg (he/him): you know, for purposes of like demonstrating the awesomeness of creating new Permission Sets. It's it's a somewhat interesting path that I went off on. Different from what we did, you know, the first 35 min of this conversation, but I just wanted to show that you could do it, at least.

202
00:41:59.260 --> 00:42:00.200
Ezra Kenigsberg (he/him): And

203
00:42:01.452 --> 00:42:09.619
Ezra Kenigsberg (he/him): I gave it this prompt here. Sorry. This is the second half of the prompt, saying "After you've gotten all that information about the Permission Sets,

204
00:42:10.048 --> 00:42:15.459
Ezra Kenigsberg (he/him): I want you to create this Permission Set for me named Opportunity--" (Oh, thank you very much.)

205
00:42:17.160 --> 00:42:20.760
Ezra Kenigsberg (he/him): "a Permission Set named 'Opportunity Read/Write All Fields'".

206
00:42:22.730 --> 00:42:31.000
Ezra Kenigsberg (he/him): And you can see, Read and Edit Access to the Opportunity itself, Read/Write access to fields, Read access to only the readable fields,

207
00:42:33.156 --> 00:42:34.663
Ezra Kenigsberg (he/him): and it gave me

208
00:42:35.540 --> 00:42:42.679
Ezra Kenigsberg (he/him): Apex code, which, when I ran it in that Anonymous window, created this wonderful Permission Set for me so,

209
00:42:42.880 --> 00:42:47.849
Ezra Kenigsberg (he/him): more of a proof of concept, not quite as cool as the previous 30 min of stuff.

210
00:42:48.310 --> 00:42:56.269
Ezra Kenigsberg (he/him): But I put the script up there for you at Kudotek.com. So you can play with all of this stuff, I encourage you to.

211
00:43:02.520 --> 00:43:03.749
Ezra Kenigsberg (he/him): [fumbles with windows] (get out of here.)

212
00:43:04.310 --> 00:43:28.979
Ezra Kenigsberg (he/him): I encourage you to, but this, I think, is really exciting. It's another avenue, not quite as cool as the previous stuff, but all of it's fun and productive for learning new tools, and in particular for using AI, because that really is the way for administrators, for developers, and for architects. This is how our jobs are going to work in the future. So I encourage you to check it out.

213
00:43:29.830 --> 00:43:41.750
Ezra Kenigsberg (he/him): Okay, left us with like a minute, and our very strange looking ampersand again. Any questions? Go ahead.

214
00:43:44.110 --> 00:43:56.179
Ezra Kenigsberg (he/him): The question was, can we get a recording of it? And the answer is, yes, I have been recording all of this, so I will put this recording up on Kudotek.com after the good people at Zoom have transcribed me, and all that jazz.

215
00:43:56.290 --> 00:43:57.180
Ezra Kenigsberg (he/him): Chase?

216
00:44:06.010 --> 00:44:12.700
Ezra Kenigsberg (he/him): So Chase asked. Did I have to go. This is very in the weeds here.

217
00:44:13.150 --> 00:44:25.409
Ezra Kenigsberg (he/him): So Chase asked, could I get this IsPermissionable attribute from the regular API as opposed to going to the Tooling API, and the answer is, yes, you can, but it missed some fields.

218
00:44:26.129 --> 00:44:38.580
Ezra Kenigsberg (he/him): Yeah. When I was creating this Permission Set, I did indeed just go through the regular API, and for some reason the regular API cannot see the ContractId field on Opportunity.

219
00:44:38.810 --> 00:44:48.499
Ezra Kenigsberg (he/him): Yeah, what's up with that? I don't know, man, that was very strange. So anyway, I think there we have it. Are we? Good? At 45 min there was another question over here.

220
00:44:49.890 --> 00:44:54.739
Ezra Kenigsberg (he/him): Alright! I will be available to answer any questions after this. Thank you all so much.